閱讀288 返回首頁    go 技術社區[雲棲]


大道至簡:讓你頓悟創建型設計模式

大道至簡:讓你頓悟創建型設計模式

 

佛教中有一種修行方法叫做“頓悟”,簡單的說突然間想明白了。我不是佛教弟子,但幸運的是這兩天重溫設計模式的時候,也頓悟了一把:每個創建型模式一句話總結!

 

既然是頓悟,我就不詳細介紹了,設計模式相關的書上都會有詳細的介紹,我隻把我頓悟的內容共享出來,看看你是否可以頓悟:)?

 

Abstract Factory:創建一組相關對象

什麼叫做“相關對象”,當然就是一組有關係的對象了。

邏輯上的解釋還是很難以理解,但是舉個簡單的例子相信大家就都明白了:手機主題。

 

手機主題大家肯定都玩過,比如說“變形金剛”主題、“阿凡達”主題、“浪漫XXX”主題等等,你改變了主題後,你的“桌麵、屏保、來電鈴音、短信鈴音、色彩、按鈕。。。。。。”等都會跟著一起改變,這裏就是一個典型的Abstract Factory設計模式:“主題”是Abstract Factory,“桌麵、屏保、來電鈴音、短信鈴音、色彩、按鈕。。。。。。”就是相關對象,它們之間的關係就是“具有相似的風格”。

 

Builder:創建一個複雜對象

什麼叫“複雜對象”,地球人都知道,我就不囉嗦了。

 

但實際應用中怎麼判斷呢?我有一個很簡單的方法:隻包含原生數據(即int/String/float)屬性的對象是簡單對象,包含其它對象的是複雜對象,數量越多越複雜

舉例來說:一間房子包含門、窗、地板、天花板、家具等等,“房子”就是一個複雜對象,“門、窗、地板、天花板、家具”相對來說就是簡單對象。之所以加上“相對來說”來修飾,是因為“門、窗、地板、天花板、家具”本身也可以是複雜對象,這個需要根據實際項目需要來判斷。

 

Factory Method:創建一個參數化對象

什麼叫“參數化對象”,相信大家都遇到過,簡單的說就是根據參數來創建對象。

 

舉個實例就很明白了:

Class AnimalFactory{

Animal createAnimal(String animalType) {

    if( animalType.equals(“”) ){

        return new Pig();

    }

    if( animalType.equals(“”) ){

        return new Dog();

    }

    if( animalType.equals(“”) ){

        return new Person();

    }

    if( animalType.equals(“公牛”) ){

        return new Bull();

    }

}

 

Prototype:創建一個組合對象

什麼叫“組合對象”,有了前麵三個創建型模式,為什麼還要這個模式呢?

主要的原因就是前麵三個模式都是固定的,一旦寫完,能夠創建的對象就固定了,一般情況下沒有問題,但如果要進行靈活的排列組合的話,那麼就需要創建非常多的各種子類。

 

還是以“手機主題”來說吧,如果你的手機上有10個桌麵、10個屏保、10個來電鈴音、10個短信鈴音、10個色彩、10種風格的按鈕。。。。。。”那麼排列組合下來可以有多少種“主題”呢?100萬個主題,你的手機上有這麼多主題麼?

而通過Prototype,你就可以任意定製主題了,不用創建那麼多的主題。

 

所以,Prototype與前麵三個模式相比的特點就是“靈活”。

 

Singleton:創建一個全局對象

最後這個模式是最簡單的了,相信不用頓悟你也能夠明白:)

 

 

最後更新:2017-04-02 04:26:01

  上一篇:go 電子商務類站點終極資源大全
  下一篇:go 強烈推薦:非常詳細的C++和Java對比