生成器
大约 1 分钟
意图
当你有一个复杂的对象需要创建时,生成器模式是让你能够逐步创建该复杂对象,从而生成不同形式的对象。
就像我们要画一个人,要有头、身体、手、脚。不管是什么类型的人,我们都会使用这四个相同的步骤:「画头」、「画脚」、「画手」、「画脚」。而每个部分也跟其他部分有不一样的参数,所以才有使用同样的构建过程可以创建出不同的表示。
图片来自:https://refactoringguru.cn/design-patterns/builder
UML
- 生成器:声明通用的构建步骤
- 具体生成器:提供构造过程的不同实现
- 产品:最终生成的对象
- 主管:定义调用构造步骤的顺序、可以创建和复用特定的产品配置
实现
public abstract class PersonBuilder {
public abstract void buildHead();
public abstract void buildBody();
public abstract void buildArm();
public abstract void buildLeg();
}
public class PersonFatBuilder extends PersonBuilder {
public void buildHead() {
// 画一个胖头
}
public void buildBody() {
// 画一个胖身
}
public void buildArm() {
// 画一双胖手
}
public void buildLeg() {
// 画一双胖脚
}
}
public class PersonThinBuilder extends PersonBuilder {
public void buildHead() {
// 画一个瘦头
}
public void buildBody() {
// 画一个瘦身
}
public void buildArm() {
// 画一双瘦手
}
public void buildLeg() {
// 画一双瘦脚
}
}
public class PersonDirector {
private PersonBuilder pb;
public PersonDirector(PersonBuilder pb) {
this.pb = pb;
}
public void createPerson() {
pb.buildHead();
pb.buildBody();
pb.buildArm();
pb.buildLeg();
}
}
public class BuilderMain {
public static void main(String[] args) {
PersonDirector personDirector = new PersonDirector(new PersonThinBuilder());
personDirector.createPerson();
// 你也可以用实际的类来接收产品
}
}