7.2.2 結(jié)構(gòu)性模式
機(jī)構(gòu)性模式 控制 較大部分之間的 關(guān)系。
它將以不同的方式 影響應(yīng)用程序。
允許在補(bǔ)充寫代碼或自定義代碼的情況下 創(chuàng)建系統(tǒng)。
具有增強(qiáng)的 重復(fù)使用性和應(yīng)用性能。
1、Adapter 模式
可以充當(dāng)兩個類之間的媒介,可以轉(zhuǎn)換一個類的接口,被另外一個類使用,使得具有不兼容接口的類能夠系統(tǒng)使用。
優(yōu)點:
允許多個不兼容的對象 進(jìn)行交互和通信。
提高已有功能的重復(fù)使用性。
以下情況,應(yīng)該使用 Adapter 模式:
要使用已有類,而該類接口與所需的接口并不匹配。
要創(chuàng)建可重用的類,該類可以與 不相關(guān) 或 未知類 進(jìn)行協(xié)作。
要在一個 不同于已知對象接口的接口環(huán)境中 使用對象。
必須要進(jìn)行多個源之間的接口轉(zhuǎn)換的時候。
2、Bridge模式
將一個復(fù)雜的組件 分成兩個獨立的 但又相關(guān)的 繼承層次結(jié)構(gòu):功能性抽象和內(nèi)部實現(xiàn)。
優(yōu)點:
接口與實現(xiàn)相分離。
提高了可擴(kuò)展性。
對客戶端隱藏了實現(xiàn)的細(xì)節(jié)。
以下情況中,應(yīng)該使用 Bridge 模式:
避免在抽象及其實現(xiàn)之間 存在永久的綁定。
抽象及其實現(xiàn) 可以使用子類進(jìn)行擴(kuò)展。
抽象的實現(xiàn)被改動 不用重新編譯代碼。
3、Composite 模式
創(chuàng)建樹形層次結(jié)構(gòu)來改變復(fù)雜性。
優(yōu)點:
定義了由 主要對象 和 符合對象 組成的類層次結(jié)構(gòu)。
添加新的組件類型更加簡單。
結(jié)構(gòu)的靈活性和可管理性的接口。
以下情況中,應(yīng)該使用 Composite 模式:
想要表示對象的整個 或者部分的層次結(jié)構(gòu)。
想要客戶端能夠忽略符合對象和單個對象之間的差異。
結(jié)構(gòu)可以具有任何級別的復(fù)雜性,而且是動態(tài)的。
4、Decorator 模式
不修改對象外觀和功能的情況下 添加或刪除對象功能。
優(yōu)點:
比靜態(tài)繼承具有更大的靈活性。
避免了特征裝載的類 處于層次結(jié)構(gòu)的 過高級別。
簡化了編碼。
改進(jìn)了對象的擴(kuò)展性。
在以下情況中,應(yīng)該使用 Decorator 模式:
在單個對象中 動態(tài)并且透明地 添加責(zé)任,不會影響其他對象。
以后可能要修改的對象中添加責(zé)任。
無法通過靜態(tài)子類化實現(xiàn)擴(kuò)展時。
5、Facade 模式
為子系統(tǒng)中的一組接口 提供了一個統(tǒng)一的接口。更容易使用子系統(tǒng)的高級接口。
優(yōu)點:
在不減少系統(tǒng)所提供的選項的情況下,為復(fù)雜系統(tǒng)提供了簡單接口。
屏蔽了子系統(tǒng)組件。
提高若耦合度。
將客戶端請求轉(zhuǎn)換后 發(fā)送給能夠處理這些請求的 子系統(tǒng)。
以下情況中,應(yīng)使用 Facade 模式:
為復(fù)雜的子系統(tǒng)提供簡單的接口。
客戶端和抽象的實現(xiàn)類中 存在許多依賴關(guān)系。
想要對子系統(tǒng)進(jìn)行分層。
6、Flyweight 模式
通過共享對象 減少對象數(shù)目。
通過共享一個接口來避免使用多個具有相同信息的實例 所帶來的開銷。
優(yōu)點:
減少了要處理的對象數(shù)目。
如果對象能夠持續(xù),可以減少內(nèi)存和存儲設(shè)備。
以下情況中,應(yīng)該使用 Flyweight 模式:
應(yīng)用程序使用大量的對象。
由于對象數(shù)目巨大,導(dǎo)致很高的存儲開銷。
不依賴于對象的身份。
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |