概述
建造者模式 (Builder Pattern) 又称生成器模式(视翻译而定)。该模式由一个抽象建造者类、多个具体建造者类、被创建的复杂类、指挥者(director)类构成。抽象建造者类定义被创建类的创建步骤;具体创建者类根据不同目的实现创建步骤;被创建类定义自身的复杂属性成员;指挥者类使用具体建造者类创建复杂类。该模式将一个复杂对象的创建过程和它的 representation 分离,使得相同的创建过程可以创建出不同的复杂类。
优点:相同的创建过程可以创建出不同的复杂类。可以通过增加新的具体建造者类创建新的复杂对象。扩展方便,符合“开闭原则”。
缺点:被创建的复杂类如果差异性很大,不能使用建造者模式,组成部分相似时使用才合适。被创建的复杂类如果内部过于复杂,需要大量具体建造者类,会增加系统复杂性。
class Complex {
private String fruit;
private String drink;
public String getFruit() {
return fruit;
}
public String getDrink() {
return drink;
}
public void setFruit(String f) {
fruit = f;
}
public void setDrink(String s) {
drink = s;
}
}
abstract class Builder {
protected Complex complex;
public Complex getComplex() {
return complex;
}
abstract void buildFruit();
abstract void buildDrink();
}
class SubBuilder1 extends Builder {
public void buildFruit() {
complex.setFruit("apple");
}
public void buildDrink() {
complex.setDrink("coke");
}
}
class SubBuilder2 extends Builder {
public void buildFruit() {
complex.setFruit("orange");
}
public void buildDrink() {
complex.setDrink("juice")
}
}
class Director {
private Builder builder;
public void setBuilder(Builder b) {
builder = b;
}
public Complex construct() {
builder.buildFruit();
builder.buildDrink();
return builder.getComplex();
}
}
public class Test {
public static void main(String[] args) {
Builder b = new SubBuilder1(); // or get from some file
Director d = new Director();
d.setBuilder(b);
Complex c = d.construct();
}
}
图示:
参考
[1] 刘伟,设计模式,2011.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix