Java設計模式總結

一、策略模式

1、概念:策略模式定義了算法族,並將算法族封裝起來,算法可以相互替換,算法的變動不會影響請求該算法的客戶。

2、使用場景:

              1)在不同類需要不同行爲,或者不同類需要相同行爲但行爲表現(內容)不同時,可以使用strategy模式。需注意,在設計繼承時需考慮是否使用策略模式,

尤其繼承中有動態行爲時。

               2)根據不同的情況使用不同的策略,或者策略在未來還可能用其他方式實現。

               3)對客戶隱藏具體策略算法的實現細節。

3、補充:封裝動態、多用組合少用繼承、面向接口編程而不是面向對象編程。



 二、觀察者模式

1、概念:觀察者模式定義了一系列對象之間的一對多關係,當一個對象狀態發生變化時,將會通知依賴它的多個對象。

2、使用場景:

              1)“推”或“拉”信息

              2)觸發其他對象方法

              3)解耦存在關係的多個對象

3、補充:爲實現有關係對象之間的鬆耦合而努力。

               繼承無法實現最有彈性和最好維護的設計,利用組合和委託可以實現在運行時具有集成行爲的效果。利用繼承設計子類的行爲,是在編譯時靜態決定的,而且所有子類都會繼承到相同的行爲。利用組合的做法擴展對象的行爲,可以在運行時動態的進行擴展。



三、裝飾者模式

1、概念:動態的給一個對象添加一些額外的職責。

2、使用場景:

             1)爲某個現有對象動態增加一些功能或職責。

             2)當某個對象的職責經常發生變化或經常需要動態的增加職責。

3、補充:類應該對擴展開放,對修改關閉。如果一段方法已經調試好,修改好bug。新的要求再去修改,則會導致產生新的問題。對擴展開放,可以在不修改代碼的情況下就可以搭配新的行爲,設計具有彈性,可以應對改變,可以接受新的功能來應對的需求。觀察者模式可以在不修改代碼的情況下擴展新的功能。開放-關閉原則應用在設計中最容易改變的地方。每個地方都採用開放-關閉原則是一種浪費,增加代碼複雜度。




 四、工廠方法模式

1、概念:工廠方法定義了一個創建對象的接口,但由子類決定要實例化的類是哪一個。工廠方法讓類把實例化推遲到了子類。

2、使用場景:

            1)類不知道自己要創建的是哪一個對象。

            2)類用子類創建對象。

            3)將對象的創建和使用分離

3、補充:抽象倒置原則,要依賴抽象,不要依賴具體類。




五、抽象工廠模式

1、概念:提供了一個接口,用於創建相關或依賴對象的家族,而不需要明確指定具體類。

2、使用場景:

             1)有關聯的對象需要一起應用並且它們的關係是強迫的。

             2)系統需要由多個關聯的對象來組成。

3、補充:工廠方法模式隱藏在抽象工廠模式中。



六、單例模式

1、概念:確保一個類只有一個實例,並且提供一個全局訪問點。

 七、命令模式

1、概念:將“請求”封裝成對象。使用不同的請求、隊列或日誌來參數化其他對象。命令模式也可支持撤銷操作。

2、使用場景:

             1)命令模式與多個對象之間存在調用關係,封裝調用方法即封裝請求,隱藏具體實現,將命令者與執行者完全解耦

             2)請求隊列

             3)實現日誌和事務系統

3、補充:使用“聰明”命令對象,直接實現了請求,而不是將請求委託給接收者。但是調用者和接收者之間的解耦程度差,不能把接收者當作參數傳遞給命令。



八、適配器模式

1、概念:將一個接口,轉換爲客戶所期望的接口,讓原本不兼容的類合作無間。

2、使用場景:

九、外觀模式

1、概念:定義了一個統一的接口,用來訪問子系統中的一羣接口,簡化了子系統。

2、使用場景:

            1)一個功能訪問需要調用多個對象

            2)客戶端程序與多個子系統之間有很大的依賴性

3、補充:最少知識原則:只和你的密友交談,減少對象之間的交互,只留幾個‘密友’)。外觀模式使得使用與子系統解耦。



十、模板模式

1、概念:在一個方法中定義了一個算法的骨架,並將一些步驟推遲到子類中。

2、使用場景:

            1)不改變算法結構,重新定義算法中某些步驟

3、補充:好萊塢原則(不要調用(打電話給)我們,等我們調用(打電話給)你),減少對象之間的依賴腐敗。

發佈了0 篇原創文章 · 獲贊 2 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章