設計模式之創建者模式

定義(From百度百科):
       其核心思想是將一個“復雜對象的構建算法”與它的“部件及組裝方式”分離,使得構件算法和組裝方式可以獨立應對變化;
       復用同樣的構建算法可以創建不同的表示,不同的構建過程可以復用相同的部件組裝方式

UML類圖

       

具體代碼:

public class Client {
    public static void main(String[] args) {
        Director d = new Director(new ConcreteBuilder());
        d.construct();
    }
}

public class Director {
    Builder builder;

    Director(Builder builder){
        this.builder = builder;
    }

    void construct(){
        builder.buildPart();
    }
}

public class ConcreteBuilder implements Builder {
    private Product product;

    public Product getResult() {
        return product;
    }

    @Override
    public void buildPart() {

    }
}

public class Product {

}

 

舉個例子:

       一輛車是由很多部件組成的,有大到發動機,小到后視鏡等等部分組成,如果說組裝一個汽車交給用戶那顯然是不現實的,
畢竟用戶想要的只是一個汽車,你怎么造,他不關心。
比如說我想要個奧迪,那說到上面的例子,我就告訴Director,我要構造個奧迪。
那Director找到奧迪對應的Builder接口(ConcreteBuilder實例), ConcreteBuilder知道造奧迪的各個部分和步驟,
比如先造個大架子,在選個發動機,在選個合適的輪胎,最后按個后視鏡,這些步驟就是buildPart的過程,總之很復雜過程,
但對于用戶來說就是奧迪,才不關心這些復雜的過程。
還有說一下這個例子貌似跟抽象工廠很像,但是有一個重要的區別,工廠只負責生產出這個車的各個部件,并不負責組裝。
這是區分兩種模式很重要的部分。

各部分組成:

Builder:給出一個抽象接口,以規范產品對象的各個組成成分的建造。這個接口規定要實現復雜對象的哪些部分的創建,并不涉及具體的對象部件的創建。
對應上面的例子就是造車的各部分架子發動機等等的組建。
ConcreteBuilder:實現Builder接口,針對不同的商業邏輯,具體化復雜對象的各部分的創建。 在建造過程完成后,提供產品的實例。
對應上面的就是組裝奧迪的Builder,一步步加上發農機輪子...
Director:調用具體建造者來創建復雜對象的各個部分,在指導者中不涉及具體產品的信息,只負責保證對象各部分完整創建或按某種順序創建。
Director這個單詞的意思是導演,職責也很明確就是調度。上面的例子我如果作為出品人想法是要奧迪,導演通知ConcreteBuilder去做。
Product:要創建的復雜對象。
對應上面的就是奧迪。

優缺點:
優點:
        松耦合:將復雜產品的創建步驟分解在不同的方法中,使得創建過程更加清晰,使得我們能夠更加精確的控制復雜對象的產生過程。
        更好的復用性:構建產品和組裝拆分,使得構建產品可以復用。

缺點:
        建造者模式所創建的產品一般具有較多的共同點,其組成部分相似,如果產品之間的差異性很大,則不適合使用建造者模式,因此其使用范圍受到一定的限制。
        如果產品的內部變化復雜,可能會導致需要定義很多具體建造者類來實現這種變化,導致系統變得很龐大。


來源:itnose

上一篇: String、StringBuffer、StringBulider

下一篇: Lucence_Curd

分享到: 更多
斗地主单机版不用网络 七乐彩基本走势图表图 老虎下载app领取38元彩金 3d定跨度的新技巧 11选5任选五胆拖技巧 研究七星彩有什么技巧吗 全天北京赛场pk10数据计划 二十一点分牌补牌技巧 ag赢钱技巧 北京pk赛车139开奖历史 时时彩最快开奖走势图 时时彩走势图 四川时时下载手机版 重庆时时5星玛走势图 江苏时时开奖号码走势图 重庆时时走势直播