轉載 Doing
設計模式的六大原則
開閉原則:模塊應盡量在不修改原代碼(閉)的情況下進行擴展(開)。即在程序需要進行拓展的時候,不能去修改原有的代碼,實現一個熱插拔的效果。
里氏代換原則:如果調用的是父類的話,那么換成子類也完全可以運行。 派生類能夠在基類的基礎上增加新的行為。只有當派生類可以替換掉基類,且軟件單位的功能不受到影響時,基類才能真正被復用。實現開閉原則的關鍵步驟就是抽象化,而基類與子類的繼承關系就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規范。
依賴倒置原則:1、高層次的模塊不應該依賴于低層次的模塊,他們都應該依賴于抽象。2、抽象不應該依賴于具體實現,具體實現應該依賴于抽象。要求對抽象/接口進行編程,不要對實現進行編程,這樣就降低了客戶與實現模塊間的耦合。
接口隔離原則:每一個接口應該是一種角色,不干不該干的事,該干的事都要干。降低類之間的耦合度。
合成復用原則:要盡量使用組合/ 聚合,盡量不要使用繼承。只有“Is - A” 關系才符合繼承關系,“Has- A” 關系應當使用聚合來描述。
最少知識原則:一個對象應對其它對象有盡可能少的了解。即一個實體應當盡量少地與其他實體之間發生相互作用,使得系統功能模塊相對獨立。
創建型模式
這些設計模式提供了一種在創建對象的同時隱藏創建邏輯的方式,而不是使用新的運算符直接實例化對象。這使得程序在判斷針對某個給定實例需要創建哪些對象時更加靈活。
工廠模式與抽象工廠模式 **(Factory Pattern)(Abstract Factory Pattern):不同條件下創建不同實例
單例模式 (Singleton Pattern)**:保證一個類僅有一個實例
建造者模式 (Builder Pattern)**:將一個復雜的構建過程與其具表示細節相分離,使得同樣的構建過程可以創建不同的表示
原型模式 (Prototype Pattern)**:通過拷貝原型創建新的對象
結構型模式
這些設計模式關注類和對象的組合。
適配器模式 (Adapter Pattern)**:使得原本由于接口不兼容而不能一起工作的那些類可以一起工作
裝飾器模式 (Decorator Pattern)**:保持接口,增強性能:修飾類繼承被修飾對象的抽象父類,依賴被修飾對象的實例(被修飾對象依賴注入),以實現接口擴展
橋接模式 (Bridge Pattern)**:兩個維度獨立變化,依賴方式實現抽象與實現分離:需要一個作為橋接的接口/抽象類,多個角度的實現類依賴注入到抽象類,使它們在抽象層建立一個關聯關系
外觀模式 (Facade Pattern)**:在客戶端和復雜系統之間再加一層,這一次將調用順序、依賴關系等處理好。即封裝底層實現,隱藏系統的復雜性,并向客戶端提供了一個客戶端可以訪問系統的高層接口
代理模式 (Proxy Pattern)**:為其他對象提供一種代理以控制對這個對象的訪問:增加中間層(代理層),代理類與底層實現類實現共同接口,并創建底層實現類對象(底層實現類對象依賴注入代理類),以便向外界提供功能接口
過濾器模式 (Filter、Criteria Pattern)**:使用不同的標準來過濾一組對象,通過邏輯運算以解耦的方式把它們連接起來
組合模式 (Composite Pattern)**:用戶對單個對象和組合對象的使用具有一致性的統一接口
享元模式 (Flyweight Pattern)**:享元工廠類控制;HashMap實現緩沖池重用現有的同類對象,如果未找到匹配的對象,則創建新對象
行為型模式
這些設計模式特別關注對象之間的通信。
責任鏈模式(Chain of Responsibility Pattern)**:攔截的類都實現統一接口,每個接收者都包含對下一個接收者的引用。將這些對象連接成一條鏈,并且沿著這條鏈傳遞請求,直到有對象處理它為止。
觀察者模式(Observer Pattern)**:一對多的依賴關系,在觀察目標類里有一個 ArrayList 存放觀察者們。當觀察目標對象的狀態發生改變,所有依賴于它的觀察者都將得到通知,使這些觀察者能夠自動更新(即使用推送方式)
模板模式(Template Pattern)**:將這些通用算法抽象出來,在一個抽象類中公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但調用將以抽象類中定義的方式進行
命令模式(Command Pattern)**:將"行為請求者"與"行為實現者"解耦:調用者依賴命令,命令依賴接收者,調用者Invoker→命令Command→接收者Receiver
解釋器模式(Interpreter Pattern):給定一個語言,定義它的文法表示,并定義一個解釋器,這個解釋器使用該標識來解釋語言中的句子
迭代器模式(Iterator Pattern):集合中含有迭代器:分離了集合對象的遍歷行為,抽象出一個迭代器類來負責,無須暴露該對象的內部表示
中介者模式(Mediator Pattern)**:對象與對象之間存在大量的關聯關系,將對象之間的通信關聯關系封裝到一個中介類中單獨處理,從而使其耦合松散,可以獨立地改變它們之間的交互
策略模式(Strategy Pattern)**:策略對象依賴注入到context對象,context對象根據它的策略改變而改變它的相關行為(可通過調用內部的策略對象實現相應的具體策略行為)
狀態模式(State Pattern)**:狀態對象依賴注入到context對象,context對象根據它的狀態改變而改變它的相關行為(可通過調用內部的狀態對象實現相應的具體行為)
備忘錄模式(Memento Pattern):通過一個備忘錄類專門存儲對象狀態??蛻敉ㄟ^備忘錄管理類管理備忘錄類。
空對象模式(Null Object Pattern):創建一個未對該類做任何實現的空對象類,該空對象類將無縫地使用在需要檢查空值的地方。不要為了屏蔽null而使用空對象,應保持用null,遠比用非null的值來替代“無值”要好。(慎用)