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与模式》 阎宏
没有评论:
发表评论