設計模式快速學習(四)建造者模式

微笑面對生活發表於2018-08-13

建造者模式(Builder Pattern)使用多個簡單的物件一步一步構建成一個複雜的物件。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。將一個複雜的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。

優點
  1. 建造者獨立,易擴充套件。
  2. 便於控制細節風險。
缺點
  1. 產品必須有共同點,範圍有限制。
  2. 如內部變化複雜,會有很多的建造類。

角色介紹

建造者模式有四個角色

  1. Product(產品類):要建造的物件
  2. builder(抽象建造者):規範建造物件的組成成分,但不具體建立。
  3. ConcreteBuilder(具體建造者):根據抽象建造者規範的組成成分來具體建立,並返回建造物件(產品類)例項。
  4. Director(指導者):呼叫具體建造者來建造各個部分,指導者只需要關注建造順序,而不需要關注各成分(產品類屬性)具體資訊。

執行順序: Director->builder->ConcreteBuilder 最後返回Product

產品類

要建造的物件

public class Phone {
    /**
     * 處理器
     */
    private String cpu;
    /**
     * 螢幕
     */
    private String screen;
    /**
     * 相機
     */
    private String camera;

getter and setter...
複製程式碼

抽象建造者

規範建造物件的組成成分,但不具體建立。

public interface PhoneBuilder {
    void buildScreen();
    void buildCpu();
    void buildCamera();

    Phone buildPhone();
}
複製程式碼

具體建造者

根據抽象建造者規範的組成成分來具體建立,並返回建造物件(產品類)例項。

public class ConcreteBuilder implements PhoneBuilder{
    public Phone phone;
    public ConcreteBuilder() {
        phone = new Phone();
    }

    @Override
    public void buildScreen() {
        phone.setScreen("三星OLED螢幕");
    }

    @Override
    public void buildCpu() {
        phone.setCpu("驍龍845");
    }

    @Override
    public void buildCamera() {
        phone.setCamera("SONY");
    }

    @Override
    public Phone buildPhone() {
        return this.phone;
    }
}
複製程式碼

指導者

呼叫具體建造者來建造各個部分,指導者只需要關注建造順序,而不需要關注各成分(產品類屬性)具體資訊。

public class Direct {
    public Phone constructMi8(PhoneBuilder phoneBuilder){
        phoneBuilder.buildCamera();
        phoneBuilder.buildCpu();
        phoneBuilder.buildScreen();
        return phoneBuilder.buildPhone();
    }
}
複製程式碼

測試

public class Main {
    public static void main(String[] args) {
        Direct direct = new Direct();
        Phone phone = direct.constructMi8(new ConcreteBuilder());
        System.out.println(phone);
    }
}
複製程式碼
Phone{cpu='驍龍845', screen='三星OLED螢幕', camera='SONY'}
複製程式碼

與抽象工廠模式區別

建造者模式和抽象工廠模式是很像的(都是建立產品類例項),建造者模式比它多了一個指導者的角色,所以它們的最大區別在於

建造者模式只需要關注產品類建造的順序,而不需要關注其具體資訊。

而抽象工廠模式需要關注其具體資訊去建立產品類。

抽象工廠模式順風車:設計模式快速學習(二)抽象工廠模式

相關文章