7.2 設(shè)計模式實例
7.2.1 創(chuàng)建性模式
通過該了的子類來創(chuàng)建對象的。但是,這可能會 限制在系統(tǒng)內(nèi)創(chuàng)建對象的類型或數(shù)目。
1、Abstract Factory 模式
在不指定具體類的情況下,為創(chuàng)建一些列 相關(guān) 或 相互依賴的對象提供了接口。
提供了一個可以 確定合適的具體類 的抽象類。
優(yōu)點:
可以與具體類分開。
更容易在產(chǎn)品系列中轉(zhuǎn)換。
提高了產(chǎn)品間的一致性。
以下情況應(yīng)該使用 Abstract Factory 模式:
系統(tǒng)獨立于產(chǎn)品的 創(chuàng)建、組成、表示。
系統(tǒng)配置成 具有多個產(chǎn)品的 系列。
相關(guān)產(chǎn)品對象系列 是共同使用的,而且必須確保這一點。
你希望提供產(chǎn)品的類庫,只開放其接口。
2、Builder 模式
將復(fù)雜對象的 構(gòu)件與表示 相分離,相同的構(gòu)造過程可以創(chuàng)建不同的對象,通過只指定對象的 類型和內(nèi)容。
一次就可以創(chuàng)建所有的復(fù)雜對象,而其他模式一次就只能創(chuàng)建一個對象。
優(yōu)點:
可以對產(chǎn)品內(nèi)部表示進行改變。
將構(gòu)造代碼與表示代碼相分離。
以下情況應(yīng)該使用 Builder 模式:
算法獨立于 組成對象。
構(gòu)造過程必須允許已構(gòu)件對象有不同表示。
3、Factory Method 模式
實例化工作交給其子類,可以在不修改代碼的情況下引入新類,因為新類只實現(xiàn)了接口。
優(yōu)點:
代碼只處理接口,因此可以使用任何實現(xiàn)了接口的類。
在類中創(chuàng)建對象比直接在客戶端創(chuàng)建要更加靈活。
以下情況中,應(yīng)該使用 Factory Method 模式:
類不能預(yù)料它必須創(chuàng)建的對象的類。
類希望其子類指定要創(chuàng)建的對象。
類將責(zé)任轉(zhuǎn)給某個幫助子類,而用戶希望定位那個被授權(quán)的幫助子類。
4、Prototype 模式
只要將對象類定義成能夠復(fù)制自身就可以實現(xiàn)。
優(yōu)點如下:
可以在運行時 添加或刪除產(chǎn)品。
通過改變值 指定新對象。
通過改變結(jié)構(gòu) 制定新對象。
減少子類的生成和使用。
可以用類 動態(tài)地配置 應(yīng)用程序。
以下情況中,應(yīng)該使用Prototype 模式:
運行時,指定需要實例化的類,例如動態(tài)載入。
避免構(gòu)建與產(chǎn)品的類層次結(jié)構(gòu)相似的 工廠類層次結(jié)構(gòu)。
5、Singleton 模式
確保 一個類只有一個實例,并且提供全局訪問入口,確保使用這個 實例 所有的對象 使用相同的實例。
優(yōu)點:
對單個實例的受控訪問。
命名空間的減少。
允許改進操作和表示。
允許改變數(shù)目的實例。
比類操作更靈活。
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |