@BertLee
2017-08-08T23:04:09.000000Z
字数 1503
阅读 1088
建造者模式可以使客户端不需要知道产品有哪些组件,各组件是怎么生产的,最后是怎么装配组合的,只可以使程序更简洁,灵活。
- 抽象建造者:包括组件构造方法和产品返回方法;产品有多少零件,就有多少build方法。
- 具体建造者:实现产品组件的build方法
- 导演者:提供产品的组合方法
- 产品:具体类,包含组件及其getter,setter方法
建造者模式的结构如下图:
/**
* 具体产品
*/
public class Computer {
private String cpu;
private String keybord;
private String mouse;
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getKeybord() {
return keybord;
}
public void setKeybord(String keybord) {
this.keybord = keybord;
}
public String getMouse() {
return mouse;
}
public void setMouse(String mouse) {
this.mouse = mouse;
}
@Override
public String toString() {
return "Computer{" +
"cpu='" + cpu + '\'' +
", keybord='" + keybord + '\'' +
", mouse='" + mouse + '\'' +
'}';
}
}
/**
* builder接口
* 1.提供build组件的方法,类似set方法
* 2.提供返回产品的build方法,类似get方法
*/
public interface Builder {
public Builder buildMouse(String mouseType);
public Builder buildKeybord(String keybordType);
public Computer build();
}
/**
* 实现builer接口
* 1.提供想要产品的成员变量
* 2.在构造方法中,初始化必需参数
* 3.build组件的方法中,初始化不必须参数
*/
public class ComputerBuilder implements Builder{
private Computer computer;
public ComputerBuilder(String cpuType){
computer = new Computer();
computer.setCpu(cpuType);
}
public Builder buildKeybord(String keybordType) {
computer.setKeybord(keybordType);
return this;
}
public Builder buildMouse(String mouseType) {
computer.setMouse(mouseType);
return this;
}
public Computer build() {
return computer;
}
}
吹牛:建造者模式将产品的构建和组合的职责分割开来,适合创建具有多种约束条件的复杂对象,最简洁的用法是将Director角色去掉,在cient采用链式编程的方法,将其初始化。
转载时,注明出处是人格的一种体现。
https://www.zybuluo.com/BertLee/note/843667
能力有限,如有纰漏,请在评论区指出,老朽虽一把年纪,必当感激涕零,泪如雨下。若有满嘴喷粪撕逼者,一律拉黑、举报,并移交阎王爷处理。