设计模式-建造者模式
建造者模式(Builder Pattern)是一种创建型设计模式,用于构建复杂对象的创建过程,并允许用户通过一步步的方式来生成对象。通过使用建造者模式,可以将对象的构造过程与它的表示分离,从而使得同样的构造过程可以创建不同的表示。
建造者模式的组成部分:
- 产品类(Product):
- 要构建的复杂对象。
- 建造者接口(Builder):
- 定义了构建产品各个部分的方法。
- 具体建造者(ConcreteBuilder):
- 实现了
Builder
接口,负责构建具体的产品,并提供获取最终产品的方法。
- 实现了
- 指挥者(Director):
- 负责管理建造过程,指导建造者一步步创建产品。
- 客户端(Client):
- 使用指挥者与建造者生成所需的产品。
示例代码:构建电脑
问题背景
假设需要构建一台电脑,电脑由多个组件组成(如 CPU、内存、硬盘等)。不同配置的电脑需要用不同的构造过程,但最终生成的对象都是电脑。
实现代码
// 1. 产品类(Computer)
class Computer {
private String cpu;
private String memory;
private String storage;
private String gpu;
// 设置组件的方法
public void setCpu(String cpu) {
this.cpu = cpu;
}
public void setMemory(String memory) {
this.memory = memory;
}
public void setStorage(String storage) {
this.storage = storage;
}
public void setGpu(String gpu) {
this.gpu = gpu;
}
@Override
public String toString() {
return "Computer {" +
"CPU='" + cpu + '\'' +
", Memory='" + memory + '\'' +
", Storage='" + storage + '\'' +
", GPU='" + gpu + '\'' +
'}';
}
}
// 2. 抽象建造者(Builder)
interface ComputerBuilder {
void buildCpu();
void buildMemory();
void buildStorage();
void buildGpu();
Computer getResult();
}
// 3. 具体建造者(ConcreteBuilder)
// 游戏电脑建造者
class GamingComputerBuilder implements ComputerBuilder {
private Computer computer = new Computer();
@Override
public void buildCpu() {
computer.setCpu("高性能CPU");
}
@Override
public void buildMemory() {
computer.setMemory("16GB内存");
}
@Override
public void buildStorage() {
computer.setStorage("1TB SSD");
}
@Override
public void buildGpu() {
computer.setGpu("高性能独立显卡");
}
@Override
public Computer getResult() {
return computer;
}
}
// 办公电脑建造者
class OfficeComputerBuilder implements ComputerBuilder {
private Computer computer = new Computer();
@Override
public void buildCpu() {
computer.setCpu("经济型CPU");
}
@Override
public void buildMemory() {
computer.setMemory("8GB内存");
}
@Override
public void buildStorage() {
computer.setStorage("512GB SSD");
}
@Override
public void buildGpu() {
computer.setGpu("集成显卡");
}
@Override
public Computer getResult() {
return computer;
}
}
// 4. 指挥者(Director)
class ComputerDirector {
private ComputerBuilder builder;
public ComputerDirector(ComputerBuilder builder) {
this.builder = builder;
}
// 指导建造步骤
public Computer construct() {
builder.buildCpu();
builder.buildMemory();
builder.buildStorage();
builder.buildGpu();
return builder.getResult();
}
}
// 5. 客户端(Client)
public class BuilderPatternExample {
public static void main(String[] args) {
// 构建游戏电脑
ComputerBuilder gamingBuilder = new GamingComputerBuilder();
ComputerDirector gamingDirector = new ComputerDirector(gamingBuilder);
Computer gamingComputer = gamingDirector.construct();
System.out.println("游戏电脑配置: " + gamingComputer);
// 构建办公电脑
ComputerBuilder officeBuilder = new OfficeComputerBuilder();
ComputerDirector officeDirector = new ComputerDirector(officeBuilder);
Computer officeComputer = officeDirector.construct();
System.out.println("办公电脑配置: " + officeComputer);
}
}
输出结果
游戏电脑配置: Computer {CPU='高性能CPU', Memory='16GB内存', Storage='1TB SSD', GPU='高性能独立显卡'}
办公电脑配置: Computer {CPU='经济型CPU', Memory='8GB内存', Storage='512GB SSD', GPU='集成显卡'}
建造者模式的优点
- 封装性:将复杂对象的构建过程封装在具体建造者中,客户端无需关心具体的构建细节。
- 可扩展性:可以轻松地添加新的具体建造者以满足不同的需求。
- 易读性:通过指挥者可以直观地看到构建步骤和流程。
建造者模式的适用场景
- 需要构建复杂对象,并且对象的创建过程需要分步骤完成。
- 不同的配置组合需要生成不同的对象。
- 需要通过多种方式构造对象,但最终的产品具有相同的基本结构。
建造者模式广泛用于需要灵活构建复杂对象的场景,例如构建配置化的对象、生成器工具等。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)