大話設計模式學習筆記(29)——設計模式總結

各種模式樣例代碼git地址:https://github.com/dlovetco/designMode 例子與博客中的問題配套

創建型模式

創建型模式隱藏了這些類的實例是如何被創建和放在一起,整個系統關於這些對象所知道的是由抽象類所定義的接口。這樣創建性模式在創建了什麼,誰創建它,它怎麼被創建的以及何時創建這些方法提供了很大的靈活性。

簡單工廠

簡單工廠不符合開放封閉原則:每新增加一個類(如乘方運算),我們就要修改簡單工廠類的switch邏輯。所以簡單工廠雖然簡單,但是不是很好。
比如:計算器的例子。

抽象工廠

抽象工廠裏面包含了創造每一個對象的方法,而它不同的實現類則表示用不同的方法來建立這些對象。比如:裝修臥室和廚房。臥室和廚房是兩個要建造的對象,如何建造這兩個對象就被封裝在抽象工廠裏面。小明和小紅分別實現抽象工廠 然後用自己的方法建造臥室和廚房。

建造者模式

建造者模式將一個複雜對象的創建與它的表示相分離,使得同樣的構建過程可以創建不同的表示。簡單的說就是隱藏了對象的建造過程。 比如要捏兩個小人。我們在建造者類裏面指定捏頭,捏身體,捏四肢的方法。然後統一在指揮者類裏面組合調用。如果要捏一個瘦子,就在指揮者裏面定義一個捏瘦子的方法然後在捏臉,捏身體,捏四肢的時候傳進去幾個參數表示體重很輕。

工廠方法

工廠方法克服了簡單工廠違背開放封閉的原則這個缺點(因爲在工廠模式中,switch選擇交給了客戶端。所以如果要新增一個乘方算法,只需要增加乘方算法工廠和乘方算法類即可。剩下的事情就只是等待客戶端來調用)

原型模式

原型模式就是自己定義一個深複製的克隆方法,方便生成重複的對象。

單例模式

單例模式 通過私有化構造函數,定義getInstance方法等措施來保證在系統中只存在一個本類的對象。

結構性模式

適配器模式

適配器模式將一個類的接口轉換成客戶希望的另外一個接口,這樣使得原本由於接口不兼容而不能在一起工作的那些類可以一起工作。

橋接模式

橋接模式的特點是當一個東西可以按照多種方式進行變化時,可以把這兩種變化獨立起來然後使用類之間的組合方式進行低耦合。比如:手機可以按照品牌分,也可以按照功能來分類。橋接模式的做法就是抽象出兩個接口(手機品牌和手機功能),再使用合成引用等方式進行低耦合。

組合模式

組合模式將對象組合成樹形結構表示,每一個非葉非總根對象都可以作爲父節點的兒子,也可以作爲以自己開始的樹結構的根。這樣的好處就是所有節點的方法都是一樣的,改變了節點類的結構相當於把樹種每一個節點的結構都給改了,組合模式使得用戶對單個對象和組合對象的使用具有一致性。

裝飾模式

裝飾模式的意圖就是動態的爲一個對象添加額外的職責。不像繼承那麼結構複雜,裝飾模式通過引用父接口對象達到可以爲所有與自己性質相同的類增加新的邏輯。

外觀模式

外觀模式在子系統諸多繁瑣接口之上定義了一個高層接口供客戶端調用。這樣客戶端就不需要跟底層接口打交道,高層接口自動組織好子系統接口的調用邏輯並封裝好了方法。

享元模式

享元模式的主旨是運用共享的技術來有效地支持大量細粒度的對象。減少過多相似細粒度對象的創建,減少機器負擔。

代理模式

代理模式就是爲一個對象外面加了一層。外部想要訪問到這個對象必須要通過代理對象。代理對象提供的接口與真實對象提供的接口應該是相同的。不相同就變成適配器模式咯。

行爲型模式

觀察者模式

觀察者模式定義了一種一對多的依賴關係(一個主題類,多個觀察者類)。當主題類的狀態發生改變的時候,主題類會調用自己保存的所有觀察者類的引用並調用他們的方法使觀察者類也同時改變狀態。

模板方法

模板方法在抽象類中定義了一個算法骨架,然後通過調用自己定義的抽象方法的方式,將每種算法一些不同的地方在子類中實現。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。

命令模式

命令模式是通過把外部的一系列請求封裝成一個命令類,然後把這個命令類傳給被調用對象。比如:我要讓廚師燒紅燒肉。服務員(命令類)會過來記錄我這個請求,再傳遞給廚師(被調用對象)。

狀態模式

狀態模式允許一個對象在其內部狀態改變時改變它的行爲,讓對象看起來似乎修改了它的類。狀態模式所做的事情其實就是把過長的條件分支語句用多個類之間的轉換代替。ifelse的每一個判斷條件分佈在各個類中,運用多態來維護分支判斷提高了系統的擴展和可用性。
比如:人的狀態(接口)分類少年,中年,老年三個狀態(三個實現類)。人在不同的狀態下有不同的事情要做(work類)。客戶端調用少年的對象說要娶媳婦(此時work對象初始化狀態爲少年),然後在少年類的方法裏面會進行判斷(怎麼判斷各有各的寫法),娶媳婦這個事情不是我這個狀態應該做的,之後把work類裏面的狀態改成中年再調用work的方法把娶媳婦的事情拋給中年。

職責鏈模式

職責鏈模式使得多個對象都有機會處理請求,從而避免請求的發送者和接受者之間的耦合關係。其實職責鏈模式跟狀態模式是比較像的。職責鏈模式通過設置對象之間的上下級關係,把請求接受者串聯成一條鏈。從鏈首開始處理客戶端請求,若某一個節點處理不了就一直向後拋。這種模式下,客戶端只管調用就完事了,具體哪個對象處理就不關客戶端什麼事了。
比如:請假的時候,需要通過一層一層的審批。

解釋器模式

解釋器模式顧名思義就是定義了一組語法,用來把客戶端提供的數據解釋成程序可閱讀的數據。

中介者模式

中介者模式通過中介者對象把系統中複雜的網狀結構改成以中介者類爲中心的星型結構。中介者模式大大減少了其他類與類之間的耦合,使他們之間的相互引用不再顯示而是通過中介者中定義的接口。但是相應的自己對於其他類的耦合程度非常高。

訪問者模式

訪問者模式表示一個作用域某對象結構的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。訪問者模式應用的前提是有一個穩定的結構。
比如人分爲男人和女人,這是不可變的。然後定義一系列的訪問者(比如人在成功的時候會怎麼樣,在失敗的時候會怎麼樣)傳入到穩定的結構中。這樣如果新增加一種悲傷的狀態,就不需要修改其他類了。

策略模式

策略模式定義了一系列的算法,並把它們都封裝成對象使它們相互可以替換。策略模式使得算法可獨立於使用它的客戶而變化。
比如:商場在不同情況下會使用不同的促銷手段。

備忘錄模式

備忘錄模式提供了一個用於保存對象瞬間狀態的類(用於不破壞類的封裝性)。這樣對象就可以在之後的某一個時間回覆到之前的狀態。
比如:打遊戲的存檔

迭代器模式

迭代器模式提供了一種順序遍歷聚合對象元素的方法,而不需要暴露該對象的內部表示。
**比如:**foreach遍歷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章