1.建造者模式概述
建造者模式就是将一个复杂对象的构建和表示分开。
建造者模式的组成部分:
- 抽象建造者类(builder):定义组成复杂对象的部件的创建,是抽象类。
- 具体建造者类(Concrete Builder):继承自builder,实现各个部件的创建,并且创建完成之后提供产品的实例。
- 产品(product):要创建的复杂对象。
- 指挥者类(Director):调用具体建造者类,以某种顺序完成各个部件的创建并返回。
UML类图如图:
根据上述UML图,转化的代码如下:
抽象builder:
public abstract class Builder {
protected Computer computer=new Computer();
public abstract void buildCpu();
public abstract void buildMainPanel();
public abstract void buildScreen();
public abstract Computer getRes();
}
产品类:
public class Computer {
private String cpu;
private String mainPanel;
private String screen;
public void setCpu(String cpu) {
this.cpu = cpu;
}
public void setMainPanel(String mainPanel) {
this.mainPanel = mainPanel;
}
public void setScreen(String screen) {
this.screen = screen;
}
public String getCpu() {
return cpu;
}
public String getMainPanel() {
return mainPanel;
}
public String getScreen() {
return screen;
}
}
ConcreteBuilder类:
public class LenovoBuilder extends Builder{
@Override
public void buildCpu() {
computer.setCpu("联想cpu");
}
@Override
public void buildMainPanel() {
computer.setMainPanel("联想主板");
}
@Override
public void buildScreen() {
computer.setScreen("联想屏幕");
}
@Override
public Computer getRes() {
return computer;
}
}
指挥者类:
public class Director {
private Builder builder;
public Director(Builder builder){
this.builder=builder;
}
public void setBuilder(Builder builder){
this.builder=builder;
}
public Computer construct(){
builder.buildCpu();
builder.buildMainPanel();
builder.buildScreen();
return builder.getRes();
}
实际上只要把UML类图和建造者模式的几个组成部分记忆并理解,对上述的代码就很好理解。
2.扩展
- 实际上当构造过程步骤不那么繁杂的时候,我们可以把construct方法放在builder中。即不需要Director类帮助组装并建造。但是这样违背了单一职责原则。
@Override
public Computer getRes() {
buildCpu();
buildMainPanel();
buildScreen();
return computer;
}