《Head.First-Design.Patterns》總結
設計原則
封裝變化:找出應用中可能需要變化之處,把它們獨立出來,不要和那些不需要變化的代碼混在一起
針對接口編程,而不是針對實現編程
(針對超類型編程,變量的聲明類型應該是超類型,通常是一個抽象類或者是一個接口)
多用組合,少用繼承
爲了交互對象之間的鬆耦合設計而努力
類應該對擴展開放,對修改關閉
依賴倒置:要依賴抽象,不要依賴具體類(當你直接實例化一個對象時,就是在依賴它的具體類)
不要讓高層組件依賴低層組件,而且,不管高層或低層組件,兩者都應該依賴於抽象
最少知識原則:只和你的密友談話(任何對象只應該調用屬於以下範圍的方法:該對象本身,
被當做方法的參數而傳遞進來的對象,此方法所創建或實例化的任何對象,對象的任何組件)
好萊塢原則:別調用(打電話給)我們,我們會調用(打電話給)你
單一責任(內聚):一個類應該只有一個引起變化的原因
設計模式
策略模式:定義了算法族,分別封裝起來,讓它們之間可以互相替換,
此模式讓算法的變化獨立於使用算法的客戶
觀察者模式:定義了對象之間的一對多依賴,這樣一來,當一個對象改變其狀態時,
它的所有依賴者都會收到通知並自動更新
裝飾者模式:動態地將責任附加到對象上,若要擴展功能,裝飾者提供了比繼承更有
彈性的替代方案
工廠方法模式:定義了一個創建對象的接口,但由子類決定要實例化的類是哪一個;
工廠方法讓類把實例化推遲到子類
抽象工廠模式:提供一個接口,用於創建相關或依賴對象的家族,而不需要明確指定具體類
單件模式:確保一個類只有一個實例,並提供一個全局訪問點
命令模式:將“請求”封裝成對象,以便使用不同的請求、隊列或者日誌來參數化其他對象;
命令模式也支持可撤銷的操作
適配器模式:將一個類的接口,轉換成客戶期望的另一個接口
適配器讓原本接口不兼容的類可以合作無間
外觀模式:提供了一個統一的接口,用來訪問子系統中的一羣接口
外觀定義了一個高層接口,讓子系統更容易使用
模板方法模式:在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中
模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟
迭代器模式:提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露其內部的表示
大師
建立可維護的OO系統,要訣就在於隨時想到系統以後可能需要的變化以及應付變化的原則
代碼應該如同晚霞中的蓮花一樣地關閉(免於改變),如同晨曦中的蓮花一樣地開放(能夠擴展)
實現一個接口 泛指 實現某個超類型(可以是類或接口)的某個方法
裝飾者可以在所委託被裝飾者的行爲之前或之後,加上自己的行爲,以達到特定目的
工廠方法使用繼承:把對象的創建委託給子類,子類實現工廠方法來創建對象
工廠方法把客戶代碼從需要實例化的具體類中解耦
抽象工廠使用對象組合:對象的創建被實現在工廠接口所暴露出來的方法中
抽象工廠創建相關的對象家族,而不需要依賴它們的具體類
抽象工廠的方法經常以工廠方法的方式實現
如果程序有多個類加載器又同時使用了單件模式,需要自行指定同一個類加載器
命令模式的更多用途:隊列請求、日誌請求
對象適配器和類適配器使用兩種不同的適配方法,分別是組合和繼承
類適配器不是使用組合來適配被適配者,而是繼承被適配者和目標類(Java不支持多繼承)
裝飾者:不改變接口,但加入責任
適配器:將一個接口轉成另一個接口
外觀:讓接口更簡單
外觀和最少知識原則
好萊塢原則和模板方法
好萊塢原則和依賴倒置原則
P353/697
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.