本文已参与「新人创作礼」活动,一起开启掘金创作之路。
创建者设计模式
分离对象子组件的单独构造(由Buider来负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。
由于实现构造和装配的解耦。不同的构造器,相同的装配,也可以做出不同的对象;相同的构造器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。
最典型的就是我们的StringBuilder和StringBuffer。
建造者模式包含如下角色:
- Builder:抽象建造者
- ConcreteBuilder:具体建造者
- Director:指挥者
- Product:产品角色
下面通过代码进行介绍。
computer类,创建方法很简单,就是一个简单的实体类。这个类在这里就好比我们要做电脑,买了几个主件,键盘啊、cpu啊主板啊什么都。
/**
* @ClassName 复杂的computer类
* @Description :创建者设计模式
**/
public class Computer {
private String mouse;
private String keyboard;
private String cpu;
private String memeoryBank;
private String mainBoard;
@Override
public String toString() {
return "Computer{" +
"mouse='" + mouse + ''' +
", keyboard='" + keyboard + ''' +
", cpu='" + cpu + ''' +
", memeoryBank='" + memeoryBank + ''' +
", mainBoard='" + mainBoard + ''' +
'}';
}
public String getMouse() {
return mouse;
}
public void setMouse(String mouse) {
this.mouse = mouse;
}
public String getKeyboard() {
return keyboard;
}
public void setKeyboard(String keyboard) {
this.keyboard = keyboard;
}
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getMemeoryBank() {
return memeoryBank;
}
public void setMemeoryBank(String memeoryBank) {
this.memeoryBank = memeoryBank;
}
public String getMainBoard() {
return mainBoard;
}
public void setMainBoard(String mainBoard) {
this.mainBoard = mainBoard;
}
}
买了这些主件后,要组装一台电脑还有很多复杂的程序,我们可以卸载builder里面,完成这些工序。
/**
* @Description :用于创建computer
**/
public class Builder {
private final Computer computer =new Computer();
public Builder buildMouse(String type){
computer.setMouse("安装了"+ type + "鼠标");
return this;
}
public Builder buildKeyboard(String type){
computer.setKeyboard("安装了"+ type + "键盘");
return this;
}
public Builder buildCPU(String type){
computer.setCpu("安装了"+ type + "CPU");
return this;
}
public Builder buildMainBoard(String type){
computer.setMainBoard("安装了"+ type + "主板");
return this;
}
public Builder buildMemeoryBank(String type){
computer.setMemeoryBank("安装了"+ type + "鼠标");
return this;
}
public Computer bulid(){
return computer;
}
}
当这些固定的加工手续定义好之后,下面就该制作生产了。下面这个测试类就按工序一步一步把电脑给我们组装好了。
/**
* @ClassName 测试创建者模式创建东西
* @Description
* @Author:liyunzhi
* @Date
* @Version 1.0
**/
public class BuilderTest {
public static void main(String[] args) {
Computer computer = new Builder()
.buildMainBoard("华硕")
.buildCPU("i9-11100")
.buildMemeoryBank("金士顿")
.buildKeyboard("联想")
.buildMouse("华为")
.bulid();
System.out.println(computer);
}
}