2009年4月5日星期日

JavaDesign_008:建造模式 Builder(摘录+整理)

1. 特点
(1)需要创建的对象内部构造十分复杂。
(2)对象的属性之间有依赖关系,如一个属性必须在另一个属性赋值后才能赋值。
(3)对象的某些属性十分重要,如果没有赋值,产品无法使用。
(4)创建的对象的过程中,还要使用其它对象,这些对象不易得到。
如果满足前四条,则非常适用建造模式。

2. 优点
(1)使用者无需关心产品有哪些零件,是如何生产出来的。
(2)产品零件的生产过程和产品的装配流程分开,达到彼此“解耦”目的。
因为同样的零件,不同的装配流程可能生产出不同的产品,比如变形金刚既可以变成汽车,也可以变成机器人。

3. 代码架构
(1)Builder
public interface Builder {

  void buildPartA();
  void buildPartB();
  void buildPartC();

  //返回最后的成品,装配过程不在这里实现
  Product getResult();
}

public class ConcreteBuilder implements Builder {

  Part partA, partB, partC;
  public void buildPartA() {};
  public void buildPartB() {};
  public void buildPartC() {};
  public Product getResult() {};
}

(2)Director
public class Director {

  private Builder builder;

  public Director( Builder builder ) {
    this.builder = builder;
  }
  
// 装配流程在这里实现
  public void construct() {
    builder.buildPartA();
    builder.buildPartB();
    builder.buildPartC();
  }
}

(3)Client
Builder builder = new ConcreteBuilder();
Director director = new Director( builder );
director.construct();
Product product = builder.getResult();

4. 与工厂模式的区别
通过建造模式生产的对象是一个完整的最终产品,而通过工厂模式生产的对象可能是一个完整的产品,也可能是一个零部件。
所以,如果你的产品特别复杂,可以用“建造模式 + 工厂模式”:建造模式组装产品,工厂模式生产零部件。

5. 典型应用场景
(1)收发邮件。
(2)汽车制造。

参考文献:
1. 《设计模式》 板桥里人
2. 《Java与模式》 阎宏

没有评论: