`
uule
  • 浏览: 6311966 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

设计模式之建造者(builder)模式

 
阅读更多




 

Builder模式是一步一步创建一个复杂的对象,因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮 方向盘 发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一辆汽车,这个装配过程也很复杂(需要很好的组装技术),Builder模式就是为了将部件和组装过程分开.

 

1). 定义

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

2). 使用的原因

     是为了将构建复杂对象的过程和它的部件解耦

3). 适用的情况

      建造模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的产品对象。

 建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来,把对建造过程进行指挥的责任和具体建造零件和责任分割开来,达到责任划分和封装的目的。 

 

其中的类或对象之间的关系为:
      Builder:抽象建造者 
     为创建一个Product对象的各个部件指定抽象接口。
      ConcreteBuilder:具体建造者

       1.实现Builder接口,构造和装配产品的各个部件.

       2.定义并明确它所创建的表示.

       3.提供一个返回这个产品的接口。

      Director:指挥者
       构建一个使用Builder接口的对象。

           调用具体建造者角色以创建产品对象;

      Product:产品角色

        1.被构建的复杂对象,具体建造者创建该产品的内部表示并表示定义它的装配过程。

        2.包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

 

为什么需要Director:

 在这个模式中,Director类好像是一个多余的类,在应用中的作用好像并不大。其实它的作用是明显的。第一,它隔离了客户及生产过程。第二,它负责控制产品的生成过程。比如你是客户,你要买汽车,你选好车型、颜色、内外装饰等,交给Director,Director告诉你去某车间取车就可以。这样其作用大家都能体会出来了吧。

 

Builder模式与AbstractFactory模式的区别:

建造者模式(Builder)与抽象工厂模式很相象,但是,Builder返回完整的一个产品,而AbstractFactory返回一系列有关系的产品;在抽象工厂模式中,客户采用AbstractFactory生成自己要用的对象,而在建造者模式中,客户指导Builder类如何生成对象,或者如何合成一些类来构成建造类,侧重于一步步构造一个复杂对象,然后将结果返回。

 

参考:http://blog.csdn.net/joyney/archive/2009/03/18/4000741.aspx

http://www.blogjava.net/amigoxie/archive/2007/03/18/104610.html

http://www.jdon.com/designpatterns/builder.htm

http://blog.csdn.net/zhengzhb/article/details/7375966

 

抽象建造者:

public interface Builder {

  protected Product pro = new Product();

  void buildPartA();   //创建部件A  比如创建汽车车轮
  
  void buildPartB();  //创建部件B 比如创建汽车方向盘
  
  void buildPartC();  //创建部件C 比如创建汽车发动机
  
  Product getResult(){
	    return pro;
    };
		//返回最后组装成品结果 (返回最后装配好的汽车)
  		//成品的组装过程不在这里进行,而是转移到下面的Director类中进行.
  		//从而实现了解耦过程和部件
} 

 具体建造者:

public class ConcreteBuilder implements Builder {

  Part partA, partB, partC;

  public void buildPartA() {  	
	    pro.setXX()...    //此处装配Product
  };

  public void buildPartB() {
    //这里是具体如何构建partB的代码
  };

   public void buildPartC() {
    //这里是具体如何构建partB的代码
  };
  
}

 指导者:

public class Director {

  private Builder builder;

  public Director( Builder builder ) {
    this.builder = builder;
  }

  // 将部件partA partB partC最后组成复杂对象
  //这里是将车轮 方向盘和发动机组装成汽车的过程
  public void construct() {
    builder.buildPartA();
    builder.buildPartB();
    builder.buildPartC();
  }

} 

 

使用:

ConcreteBuilder builder = new ConcreteBuilder();
Director director = new Director( builder );

director.construct();
Product product = builder.getResult(); 

 

省略指导者:


 

参考:http://blog.csdn.net/joyney/article/details/4000741

http://www.jdon.com/designpatterns/builder.htm

 

  • 大小: 4.7 KB
  • 大小: 3.7 KB
  • 大小: 29 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics