码迷,mamicode.com
首页 > 其他好文 > 详细

建造模式(Builder)

时间:2015-08-10 19:30:31      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

      建造模式是对象的创建模式。建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。

产品的内部表象

           一个产品常有不同的组成成分作为产品的零件。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址得到赋值之前,这个电子邮件不能发出。还有一些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义。在某个性质没有赋值之前,另一个性质则无法赋值。这些情况使得性质本身的建造涉及到复杂的商业逻辑。这时候,此对象相当于一个有待建造的产品,而对象的这些性质相当于产品的零件,建造产品的过程是建造零件的过程。由于建造零件的过程很复杂,因此,这些零件的建造过程往往被“外部化”到另外一个称做建造者的对象里,建造者对象返还给客户端的是一个全部零件都建造完毕的产品对象。

      建造模式非常适合于此种情况。建造模式将产品结构和产品的零件建造过程对客户端隐藏起来,达到责任划分和封装的目的。

 

下面给出一个示意性的系统实现。该系统涉及到四个角色:

  • 抽象建造者(builder)角色:这是一个抽象的接口,以规范产品对象各个组成成分的建造。该接口一般包含两种方法,一种是建造方法:例如本例中的buildPart1(),buildPart2()。另一种是结果返还方法:即本例中的retrieveResult()方法。一般来说产品所包含的零件数目与建造方法的数目相等。换言之,有多少零件就有多少的建造方法。
  • 具体建造者角色(ConcreteBuilder):抽象建造者角色的具体实现,这个类与应用程序紧密相关,它们在应用程序的调用下创建产品的实例。这个角色主要完成的任务有:
  1. 实现抽象建造者角色所声明的接口,给出一步一步完成产品创建的操作
  2. 在建造过程完成后,提供产品的实例
  • 导演者角色(Director):担任这个角色的类调用具体建造者角色来完成产品对象的创建。
  • 产品角色(Product):产品便是建造中的复杂对象。一般一个系统中会有多于一个的产品类,而且这些产品类不一定有共同的接口,而完全可以是不相关的。

     导演者角色是与客户端打交道的角色。导演者角色将客户端创建产品的请求划分为对各个零件的建造请求,再把这些请求委派给具体建造者角色。具体建造者角色是做具体建造工作的,但却不为客户端所知。

     一下是系统源代码:

/*
 * 导演者角色
 * */
public class Director {
	private Builder builder;
	/*
	 * 产品的构建方法,负责调用各个零件的构建方法
	 * */
	public void construct()
	{
		builder=new ConcreteBuilder();
		builder.buildPart1();
		builder.buildPart2();
		builder.retrieveResult();
	}
}

 

/*
 * 抽象建造者角色
 * */
public abstract class Builder {
	/*
	 * 产品零件构建方法
	 * */
	public abstract void buildPart1();
	/*
	 * 产品零件构建方法
	 * */
	public abstract void buildPart2();
	/*
	 * 产品返还方法
	 * */
	public abstract Product retrieveResult();
}

 

/*
 * 具体建造者角色
 * */
public class ConcreteBuilder extends Builder {

	private Product product=new Product();
	@Override
	public void buildPart1() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void buildPart2() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public Product retrieveResult() {
		// TODO Auto-generated method stub
		return product;
	}

}

 

/*
 * 产品角色
 * */
public class Product {

}

 这里仅仅给出的是一个示意性的系统实现,建造者模式的具体应用请参考另一篇文章

建造模式(Builder)

标签:

原文地址:http://www.cnblogs.com/xtsylc/p/4718624.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!