在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。
建造者模式使用多个简单的对象一步一步构建成一个复杂的对象。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。
建造者模式的实现
假设我们要构造一台电脑,包括主机、显示器、键鼠套装三个部分。那么我们可以通过以下方式来实现建造者模式。
1. 创建一个电脑类
类中包括主机、显示器、键鼠套装三个属性,以及他们的set方法和一个show方法。
//电脑类
public class Computer {
private String mainFrame; //主机
private String display; //显示器
private String keyboard; //键鼠套装
public void setMainFrame(String mainFrame) {
this.mainFrame = mainFrame;
}
public void setDisplay(String display) {
this.display = display;
}
public void setKeyboard(String keyboard) {
this.keyboard = keyboard;
}
public void showMessage(){
System.out.println("这是一台电脑。");
}
}
2. 创建建造者类
类中包含创建产品各个子部件的方法。
public class Builder extends AbstractBuilder {
@Override
public void buildMainFrame() {
computer.setMainFrame("建造好了主机");
}
@Override
public void buildDisplay() {
computer.setDisplay("建造好了显示器");
}
@Override
public void buildKeyboard() {
computer.setKeyboard("建造好了键鼠套装");
}
}
abstract class AbstractBuilder {
//创建一个电脑对象
Computer computer = new Computer();
//构造主机
public abstract void buildMainFrame();
//构造显示器
public abstract void buildDisplay();
//构造键鼠套装
public abstract void buildKeyboard();
//返回电脑对象
public Computer returnComputer(){
return computer;
}
}
3. 创建指挥者类
调用建造者中的方法完成复杂对象的创建。
public class Leader {
private Builder builder;
public Leader(Builder builder){
this.builder = builder;
}
public Computer build(){
builder.buildMainFrame();
builder.buildDisplay();
builder.buildKeyboard();
return builder.returnComputer();
}
}
4. 使用
public class BuilderMain {
public static void main(String[] args) {
Builder builder = new Builder();
Leader leader = new Leader(builder);
Computer computer = leader.build();
computer.showMessage();
}
}