描述
将一个复杂的构建与其表示相分离,使同样的构造过程可以创建不同的表示
关键点
- 具体产品:表示被构造的复杂对象
- 抽象构建产品:为创建一个产品对象的各个不见指定抽象接口。
- 抽象构建的具体实现: 实现builder的接口构造和装配该产品的对象
- 构建者:构建一个使用Builder接口的对象
优点
- 易于解耦
- 易于精确控制对象的创建
- 易于拓展
缺点
需要较多共性,如果差异大就不适合
使用场景
- 需要生成的产品对象有复杂的内部结构,这些产品对象具备共性。
- 隔离复杂对象的创建和使用
代码实现
- 具体产品
//具体产品
public class Phone {
//cpu
private String cpu;
//摄像头
private String camera;
//屏幕
private String screen;
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getCamera() {
return camera;
}
public void setCamera(String camera) {
this.camera = camera;
}
public String getScreen() {
return screen;
}
public void setScreen(String screen) {
this.screen = screen;
}
@Override
public String toString() {
return "Phone{" +
"cpu='" + cpu + '\'' +
", camera='" + camera + '\'' +
", screen='" + screen + '\'' +
'}';
}
}
- 抽象构建产品
//抽象构造类
public interface Builder {
//构建手机CPU
public void buildCpu();
//手机摄像头
public void buildCamera();
//手机屏幕
public void buildScreen();
//构建 产品
public Phone buildPhone();
}
- 抽象构建的具体实现
//抽象构造的具体实现
public class BuildPhone implements Builder {
private Phone p = new Phone();
public void buildCpu() {
p.setCpu("晓龙");
}
public void buildCamera() {
p.setCamera("三星");
}
public void buildScreen() {
p.setScreen("京东方");
}
public Phone buildPhone() {
return p;
}
}
- 构建者
//构建着
public class Director {
public static Phone constructorPhone(Builder b){
b.buildCpu();
b.buildCamera();
b.buildScreen();
return b.buildPhone();
}
}
- 测试方法
public class TestBuilder {
public static void main(String[] args) {
Phone p = Director.constructorPhone(new BuildPhone());
System.out.println(p);
}
}
网友评论