天天看點

建構者模式-Builder、Director、Product

模式思想

将一個複雜對象的構造過程分成多個步驟來完成,一方面降低了構造函數的複雜性,同時增加了靈活性;

模式角色

(産品)Product:需要構造的對象

(勞工)Builder:操作對象的具體類(set方法)

(圖紙)Director:構造對象的流程

建構者模式-Builder、Director、Product
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();
    }
}