建造者模式
- 建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需的建造者类型即可。
建造者模式结构图
代码框架
class Product {
private String partA;
private String partA;
private String partA;
//getters and setters
}
abstract class Builder {
protected Product product;
public abstract void buildPartA();
public abstract void buildPartB();
public abstract void buildPartC();
//return object
public Product getResult() {
return product;
}
}
class Director {
private Builder builer;
public Director(Builder builer) {
this.builer = builer;
}
public void setBuiler(Builder builer) {
this.builer = builer;
}
public Product construct() {
builer.buildPartA();
builer.buildPartB();
builer.buildPartC();
rreturn builer.getResult();
}
}
// client code
...
Builder builer = new ConcreteBuiler();
Director director = new Director(builer);
Product product = director.construct();
...
总结
- 建造者模式的核心在于如何一步一步地构建一个包含多个组成部件的完整对象,使用相同的构建过程构建不同的产品。
- 适合构建复杂对象
- 优点
(1):客户端不需要知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
(2)每一个具体建造者都是相对独立的,而与其他具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。由于指挥者类针对抽象建造者编程,增加新的具体建造者无需修改原有类库的代码,系统扩展方便,符合开闭原则。
(3)可以更加精细地控制产品的创建过程。将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程。
- 缺点
(1)如果产品差异性很大,就不适合用建造者模式。
(2)如果产品的内部复杂多变,就可能需要很多具体的建造者来实现这些变化,这将导致系统变得庞大,增加系统的理解难度和运行成本。