一、构造者模式的概念
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
Director[指导者]:调用具体构造者角色以创建产品对象,指导者并没有产品类的具体知识,只负责保证对象各部分完整创建或者按某种顺序创建。
Builder[抽象构造者]:这个角色用来规范产品对象各个组成部分的创建,对复杂对象的创建过程加以抽象,给出一个抽象接口,并不涉及具体对象的创建。
ConcreteBuilder[具体构造者]:实现Builder接口,针对不同的业务逻辑,具体化复杂对象各个部分的创建。在建造过程完成后,提供产品的实例。
Product[产品]:建造中的复杂对象,一般来说包含多个部分。
二、构造者模式的实现
//product
public class Computer {
List<String> parts = new ArrayList<>();
public void show() {
for (String part : parts) {
System.out.println(part);
}
}
}
//builder
public interface Builder {
void buildCpu();
void buildDisk();
void buildScreen();
Computer getComputer();
}
//concretebuilder
public class AppleComputerBuilder implements Builder {
private Computer computer= new Computer();
@Override
public void buildCpu() {
computer.parts.add("AppleCPU");
}
@Override
public void buildDisk() {
computer.parts.add("AppleDisk");
}
@Override
public void buildScreen() {
computer.parts.add("AppleScreen");
}
@Override
public Computer getComputer() {
return computer;
}
}
//director
public class Director {
private Buidler builder;
public Director(Builder builder) {
this.builder = builder;
}
public Computer build() {
builder.buildCpu();
builder.buildDisk();
builder.buildScreen();
return builder.getComputer();
}
}
public class Test {
public static void main(String[] args) {
Buidler appleBuidler = new AppleComputerBuilder();
Director director = new Director(appleBuidler);
Computer appleComputer = director.build();
appleComputer.show();
}
}
三、构造者模式的应用
1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2、当创建复杂对象时,这些对象的内部组成部分之间的建造顺序是稳定的,但对象的内部组成构建面临着复杂的变化。
四、构造者の其他问题
五、Reference
六、Resource