设计模式——建造者模式
介绍
建造者模式使多个简单的对象构建成一个复杂对象。属于创建对象的一种方式。
意图
将一个复杂的构建与其表现分离。
解决
一个复杂的对象通常由多个部分的子对象构成;
但是子对象常常回发生改变,但是组合方式比较稳定。
优点
-
创造者独立,易扩展;
-
便于控制细节风险。
缺点
- 产品必须有共同特点;
- 若内部变化复杂则会由很多的建造类。
使用场景
- 需要生成的对象具有复杂的内部解构;
- 需要生成的对象内部属性相互依赖
UML

示例
Cellphone.java
package cn.geoaryblog.design.cretedg.builder;
public class Cellphone {
private String cpu;
private String screen;
private String color;
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getScreen() {
return screen;
}
public void setScreen(String screen) {
this.screen = screen;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
建造者类:PhoneBuilder.java
package cn.geoaryblog.design.cretedg.builder;
public abstract class PhoneBuilder {
protected Cellphone cellphone = new Cellphone();
public abstract void buildCpu();
public abstract void buildScreen();
public abstract void buildColor();
public Cellphone getCellphone(){
return cellphone;
}
}
华为手机模型:HUAWEIPhone.java
package cn.geoaryblog.design.cretedg.builder;
public class HUAWEIPhone extends PhoneBuilder {
@Override
public void buildCpu() {
cellphone.setCpu("海斯芯片");
}
@Override
public void buildScreen() {
cellphone.setScreen("JDI屏幕");
}
@Override
public void buildColor() {
cellphone.setColor("亮黑色");
}
}
苹果手机模型:ApplePhone.java
package cn.geoaryblog.design.cretedg.builder;
public class ApplePhone extends PhoneBuilder {
@Override
public void buildCpu() {
cellphone.setCpu("苹果研发");
}
@Override
public void buildScreen() {
cellphone.setScreen("无");
}
@Override
public void buildColor() {
cellphone.setColor("玫瑰金");
}
}
指挥者:Director.java 隔离用户与建造过程
package cn.geoaryblog.design.cretedg.builder;
public class Director {
private PhoneBuilder builder;
public Director(PhoneBuilder builder){
this.builder = builder;
}
public Cellphone createPhone(){
builder.buildCpu();
builder.buildScreen();
builder.buildColor();
return builder.getCellphone();
}
}
客户端构建:BuildMain.java
package cn.geoaryblog.design.cretedg.builder;
public class BuildMain {
public static void main(String[] args) {
Cellphone hwphone = new Director(new HUAWEIPhone()).createPhone();
System.out.println(hwphone.getCpu());
System.out.println(hwphone.getScreen());
System.out.println(hwphone.getColor());
Cellphone applePhone = new Director(new ApplePhone()).createPhone();
System.out.println(applePhone.getCpu());
System.out.println(applePhone.getScreen());
System.out.println(applePhone.getColor());
}
}

浙公网安备 33010602011771号