title: "[設計模式]創(chuàng)建型模式"
date: 2016-03-07 18:05
tags:
- 設計模式
- design
- pattern
- creational
- factory
- method
- abstract
- singlton
categories:
- 技術
摘要:設計模式并不能減小系統(tǒng)的復雜度,并不能減少if...else... 。它只是幫助把代碼放在適當?shù)奈恢茫员阍谛枨蟾臅r改動的代碼最少。
簡單工廠模式
- 簡單工廠模式的要點在于:當你需要什么,只需要傳入一個正確的參數(shù),就可以獲取你所需要的對象,而無須知道其創(chuàng)建細節(jié)。
- 簡單工廠模式最大的優(yōu)點在于實現(xiàn)對象的創(chuàng)建和對象的使用分離,將對象的創(chuàng)建交給專門的工廠類負責,但是其最大的缺點在于工廠類不夠靈活,增加新的具體產(chǎn)品需要修改工廠類的判斷邏輯代碼,而且產(chǎn)品較多時,工廠方法代碼將會非常復雜。
- 簡單工廠模式適用情況包括:工廠類負責創(chuàng)建的對象比較少;客戶端只知道傳入工廠類的參數(shù),對于如何創(chuàng)建對象不關心。

工廠方法模式
本質(zhì)上說就是產(chǎn)品創(chuàng)建功能的下放,交給子類去做。
- 工廠方法模式是簡單工廠模式的進一步抽象和推廣。由于使用了面向?qū)ο蟮亩鄳B(tài)性,工廠方法模式保持了簡單工廠模式的優(yōu)點,而且克服了它的缺點。在工廠方法模式中,核心的工廠類不再負責所有產(chǎn)品的創(chuàng)建,而是將具體創(chuàng)建工作交給子類去做。這個核心類僅僅負責給出具體工廠必須實現(xiàn)的接口,而不負責產(chǎn)品類被實例化這種細節(jié),這使得工廠方法模式可以允許系統(tǒng)在不修改工廠角色的情況下引進新產(chǎn)品。
- 工廠方法模式的主要優(yōu)點是增加新的產(chǎn)品類時無須修改現(xiàn)有系統(tǒng),并封裝了產(chǎn)品對象的創(chuàng)建細節(jié),系統(tǒng)具有良好的靈活性和可擴展性;其缺點在于增加新產(chǎn)品的同時需要增加新的工廠,導致系統(tǒng)類的個數(shù)成對增加,在一定程度上增加了系統(tǒng)的復雜性。

抽象工廠模式
最重要的概念:產(chǎn)品族。
抽象工廠模式適用情況包括:
- 一個系統(tǒng)不應當依賴于產(chǎn)品類實例如何被創(chuàng)建、組合和表達的細節(jié);
- 系統(tǒng)中有多于一個的產(chǎn)品族,而每次只使用其中某一產(chǎn)品族;
- 屬于同一個產(chǎn)品族的產(chǎn)品將在一起使用;
- 系統(tǒng)提供一個產(chǎn)品類的庫,所有的產(chǎn)品以同樣的接口出現(xiàn),從而使客戶端不依賴于具體實現(xiàn)。

建造者模式
- 在建造者模式的結構中引入了一個指揮者類,該類的作用主要有兩個:一方面它隔離了客戶與生產(chǎn)過程;另一方面它負責控制產(chǎn)品的生成過程。指揮者針對抽象建造者編程,客戶端只需要知道具體建造者的類型,即可通過指揮者類調(diào)用建造者的相關方法,返回一個完整的產(chǎn)品對象。
- 建造者模式適用情況包括:需要生成的產(chǎn)品對象有復雜的內(nèi)部結構,這些產(chǎn)品對象通常包含多個成員屬性;需要生成的產(chǎn)品對象的屬性相互依賴,需要指定其生成順序;對象的創(chuàng)建過程獨立于創(chuàng)建該對象的類;隔離復雜對象的創(chuàng)建和使用,并使得相同的創(chuàng)建過程可以創(chuàng)建不同類型的產(chǎn)品。
- 建造者模式所創(chuàng)建的產(chǎn)品一般具有較多的共同點,其組成部分相似,如果產(chǎn)品之間的差異性很大,則不適合使用建造者模式,因此其使用范圍受到一定的限制。

單例模式
(略)
原型模式
關鍵字: - clone(); ;
區(qū)分
- 抽象工廠模式與建造者模式相似,都可以創(chuàng)建組復雜對象。主要的區(qū)別是Builder模式著重于一步步構建一個復雜對象。而Abstract Factory著重于多個系列的產(chǎn)品對象。Builder在最后一步返回產(chǎn)品(封裝了產(chǎn)品的構建),而對于Abstract Factory來說,產(chǎn)品是立即返回的。
|