模式思想
将一個複雜對象的構造過程分成多個步驟來完成,一方面降低了構造函數的複雜性,同時增加了靈活性;
模式角色
(産品)Product:需要構造的對象
(勞工)Builder:操作對象的具體類(set方法)
(圖紙)Director:構造對象的流程
Product
public class HuaweiP9 implements IProduct{
private String screen;
private String battery;
private String mainboard;
private String cpu;
public String getScreen() {
return screen;
}
public void setScreen(String screen) {
this.screen = screen;
}
public String getBattery() {
return battery;
}
public void setBattery(String battery) {
this.battery = battery;
}
public String getMainboard() {
return mainboard;
}
public void setMainboard(String mainboard) {
this.mainboard = mainboard;
}
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
}
Builder
public class HuaweiP9Builder implements IPhoneBuilder {
private final HuaweiP9 phone= new HuaweiP9();
private String system;
@Override
public void buildScreen() {
// TODO Auto-generated method stub
phone.setScreen("1920 * 1280");
System.out.println("HuaweiBuilder::we use the 1920 * 1280 Screen...");
}
@Override
public void buildBattery() {
// TODO Auto-generated method stub
phone.setBattery("5000mAh");
System.out.println("HuaweiBuilder::we use the 5000mAh battery...");
}
@Override
public void buildMainboard() {
// TODO Auto-generated method stub
phone.setMainboard("reliable");
System.out.println("HuaweiBuilder::we use the very reliable mainboard...");
}
@Override
public void buildCpu() {
// TODO Auto-generated method stub
phone.setCpu("Kirin920");
System.out.println("HuaweiBuilder::we use the Kirin920 CPU...");
}
public void setSystem(String system){
this.system = system;
}
//add operate system...
public void addSystem(){
if(null == system)
return;
System.out.println("HuaweiBuilder::u add system"+system+"...");
}
//type 1: just get the result
public IProduct getProduct(){
return phone;
}
//type 2: implement the director within the builder
public IProduct build(){
buildScreen();
buildBattery();
buildMainboard();
buildCpu();
addSystem();
return phone;
}
}
Director
public class HuaweiP9Director {
public IProduct direct(IPhoneBuilder builder ){
builder.buildCpu();
builder.buildMainboard();
builder.buildScreen();
builder.buildBattery();
return builder.getProduct();
}
}