目录
1.建造者模式介绍
- 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。
- 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
- 允许用户只通过指定复杂对象的类型和内容就可以构建它们,不需要知道内部的具体构建细节
2.核心角色
- Builder:抽象建造者,定义多个通用方法和构建方法
- ConcreteBuilder:具体建造者,可以有多个
- Director:指挥者,控制整个组合过程,将需求交给建造者,由建造者去创建对象
- Product:产品角色
3.应用实例
- 1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。
- 2、电脑有低配、高配,组装需要CPU、内存、电源、硬盘、主板等
- 3、JAVA 中的 StringBuilder。
4.案例实现
- **1.创建具体的产品类(**Product )
java
/**
* 具体的产品-电脑
*/
public class Computer {
/**
* 主板
*/
private String mainBoard;
/**
* cpu
*/
private String cpu;
/**
* 磁盘
*/
private String disk;
/**
* 屏幕
*/
private String screen;
/**
* 内存
*/
private String memory;
public String getMainBoard() {
return mainBoard;
}
public void setMainBoard(String mainBoard) {
this.mainBoard = mainBoard;
}
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getDisk() {
return disk;
}
public void setDisk(String disk) {
this.disk = disk;
}
public String getScreen() {
return screen;
}
public void setScreen(String screen) {
this.screen = screen;
}
public String getMemory() {
return memory;
}
public void setMemory(String memory) {
this.memory = memory;
}
@Override
public String toString() {
return "Computer{" +
"mainBoard='" + mainBoard + '\'' +
", cpu='" + cpu + '\'' +
", disk='" + disk + '\'' +
", screen='" + screen + '\'' +
", memory='" + memory + '\'' +
'}';
}
}
- **2.创建抽象创造者 (**Builder )
java
/**
* 建造者模式统一接口
*/
public interface Builder {
void builderMainBoard();
void builderCpu();
void builderDish();
void builderScreen();
void builderMemory();
Computer createComputer();
}
- **3.创建具体的创造者类(**ConcreteBuilder )
java
/**
* 具体的建造者-实现不同的产品-高配电脑
*/
public class HighComputer implements Builder {
Computer computer = new Computer();
@Override
public void builderMainBoard() {
computer.setMainBoard("高配主板");
}
@Override
public void builderCpu() {
computer.setCpu("高配cpu");
}
@Override
public void builderDish() {
computer.setDisk("高配磁盘");
}
@Override
public void builderScreen() {
computer.setScreen("高配屏幕");
}
@Override
public void builderMemory() {
computer.setMemory("高配内存");
}
@Override
public Computer createComputer() {
return computer;
}
}
java
/**
* 具体的建造者-实现不同的产品-底配电脑
*/
public class LowComputer implements Builder {
Computer computer = new Computer();
@Override
public void builderMainBoard() {
computer.setMainBoard("低配主板");
}
@Override
public void builderCpu() {
computer.setCpu("低配cpu");
}
@Override
public void builderDish() {
computer.setDisk("低配磁盘");
}
@Override
public void builderScreen() {
computer.setScreen("低配屏幕");
}
@Override
public void builderMemory() {
computer.setMemory("低配内存");
}
@Override
public Computer createComputer() {
return computer;
}
}
- 5.创建具体的指挥者(Director )
java
/**
*总调度者
* 将产品和创建过程进行解耦,使用相同的创建过程创建不同的产品
*/
public class Director {
public Computer create(Builder builder){
builder.builderCpu();
builder.builderMainBoard();
builder.builderDish();
builder.builderMemory();
builder.builderScreen();
return builder.createComputer();
}
}
5.优缺点
- 优点
- 分离构建过程和表示,使得构建过程更加灵活,可以构建不同的表示。
- 可以更好地控制构建过程,隐藏具体构建细节。
- 代码复用性高,可以在不同的构建过程中重复使用相同的建造者。
- 增加新的具体建造者无须修改原有类库的代码,符合开闭原则
- 缺点
- 建造者模式所创建的产品一般具有较多的共同点,如果产品差异大则不建议使用
- 建造者模式增加了系统的类和对象数量。