設(shè)計模式快速學(xué)習(xí)(四)建造者模式

建造者模式(Builder Pattern)使用多個簡單的對象一步一步構(gòu)建成一個復(fù)雜的對象。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。將一個復(fù)雜的構(gòu)建與其表示相分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。

優(yōu)點
  1. 建造者獨立,易擴(kuò)展。
  2. 便于控制細(xì)節(jié)風(fēng)險。
缺點
  1. 產(chǎn)品必須有共同點,范圍有限制。
  2. 如內(nèi)部變化復(fù)雜,會有很多的建造類。

角色介紹

建造者模式有四個角色

  1. Product(產(chǎn)品類):要建造的對象
  2. builder(抽象建造者):規(guī)范建造對象的組成成分,但不具體創(chuàng)建。
  3. ConcreteBuilder(具體建造者):根據(jù)抽象建造者規(guī)范的組成成分來具體創(chuàng)建,并返回建造對象(產(chǎn)品類)實例。
  4. Director(指導(dǎo)者):調(diào)用具體建造者來建造各個部分,指導(dǎo)者只需要關(guān)注建造順序,而不需要關(guān)注各成分(產(chǎn)品類屬性)具體信息。

執(zhí)行順序:
Director->builder->ConcreteBuilder
最后返回Product

產(chǎn)品類

要建造的對象

public class Phone {
    /**
     * 處理器
     */
    private String cpu;
    /**
     * 屏幕
     */
    private String screen;
    /**
     * 相機(jī)
     */
    private String camera;

getter and setter...

抽象建造者

規(guī)范建造對象的組成成分,但不具體創(chuàng)建。

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

    Phone buildPhone();
}

具體建造者

根據(jù)抽象建造者規(guī)范的組成成分來具體創(chuàng)建,并返回建造對象(產(chǎn)品類)實例。

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;
    }
}

指導(dǎo)者

調(diào)用具體建造者來建造各個部分,指導(dǎo)者只需要關(guān)注建造順序,而不需要關(guān)注各成分(產(chǎn)品類屬性)具體信息。

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'}

與抽象工廠模式區(qū)別

建造者模式和抽象工廠模式是很像的(都是創(chuàng)建產(chǎn)品類實例),建造者模式比它多了一個指導(dǎo)者的角色,所以它們的最大區(qū)別在于

建造者模式只需要關(guān)注產(chǎn)品類建造的順序,而不需要關(guān)注其具體信息。

而抽象工廠模式需要關(guān)注其具體信息去創(chuàng)建產(chǎn)品類。

抽象工廠模式順風(fēng)車:設(shè)計模式快速學(xué)習(xí)(二)抽象工廠模式

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容