设计形式之略见一斑(建造模式builder)

设计模式之略见一斑(建造模式builder)
建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。

建造模式很象抽象工厂模式,细微的区别的大概只有在反复使用的方能体会。

举个简单的例子,如汽车,有很多部件,车轮,方向盘,发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一部汽车,这个装配过程也很复杂(需要很好的组装技术), builder模式就是为了将部件和组装分开。

下面就简单列出代码:

  Director(建造者)利用Builder(建造工具)来创建这个产品



首先是一个建造工具(builder)接口

public interface Builder {    
  
  //创建部件A  比如创建汽车车轮   
  void buildPartA();    
  //创建部件B 比如创建汽车方向盘   
  void buildPartB();    
  //创建部件C 比如创建汽车发动机   
  void buildPartC();    
  Product getResult(); //返回这个产品   
}   


然后就是建造者Director接口,建造者利用建造工具(builder)进行创建产品(construct方法)
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();    
  
  }    
  
}   


建造工具的具体建造方式:
public class ConcreteBuilder implements Builder {    
  
  Part partA, partB, partC;    
  public void buildPartA() {   
    //这里是具体如何构建partA的代码   
  
  };    
  public void buildPartB() {    
    //这里是具体如何构建partB的代码   
  };    
   public void buildPartC() {    
    //这里是具体如何构建partB的代码   
  };    
   public Product getResult() {    
    //返回最后组装成品结果   
  };    
  
}   
   


最后调用方式 如下:

ConcreteBuilder builder = new ConcreteBuilder(); //创建一个建造工具   
Director director = new Director( builder ); //创建(建造者)并把建造工具拿给建造者   
  
director.construct(); //建造者利用工具进行建造   
Product product = builder.getResult(); //取得产品  


原文:http://lgh3292.iteye.com/blog/585133