288
技術社區[雲棲]
大道至簡:讓你頓悟創建型設計模式
大道至簡:讓你頓悟創建型設計模式
佛教中有一種修行方法叫做“頓悟”,簡單的說突然間想明白了。我不是佛教弟子,但幸運的是這兩天重溫設計模式的時候,也頓悟了一把:每個創建型模式一句話總結!
既然是頓悟,我就不詳細介紹了,設計模式相關的書上都會有詳細的介紹,我隻把我頓悟的內容共享出來,看看你是否可以頓悟:)?
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