設計模式彙總

一,概念

設計模式是一種被重複使用,被很多人知曉,經過分類,代碼設計經驗的總結。

是一種優雅的代碼實現,能夠便於他人理解,能夠適應需求不斷變化的經驗總結。

很多的場景是,前期的需求比較簡單,簡單的實現,但是隨着系統的豐富完善,簡單的實現方式越來越臃腫,修改的代價越來越大時,再重構的過程中,使用設計模式,可以減小系統的複雜性。


一共23種設計模式。

創建型模式(5種):

   工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。

結構型模式(7種):

   適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。

行爲型模式(11種):

   策略模式、模板方法模式、觀察者模式、迭代器模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。


二,逐一說明

創建型

工廠模式:通過接口定義規範,有多個不同的接口實現,通過給工廠類傳入參數,獲得不同接口實現。這樣如果需要新增或者替換實現,只需要修改工程類。

需要注意的是,簡單的對象可以直接new,如果使用工程方法,就會增加類,並且增加代碼複雜度。


抽象工廠模式:抽象工廠模式是對工程模式的再封裝,工廠模式是對工廠類直接new,抽象工廠模式是更復雜的對象,比如qq換皮膚,會涉及到更多的更改,對工廠本身也做了抽象化。


單例模式:避免全局的對象頻繁的創建,保證每次請求都是拿到的同一個實例。


建造者模式:一個複雜對象的構建,可能由多個子系統各自創建並且組裝構建,建造者模式將子系統各自創建和組裝分開,適用於子系統變化大,而組裝構建基本穩定的場景。(比如去肯德基點餐,一個套餐組合過程不會有太大的變化,但是套餐裏的產品會有較大的不同)


原型模式:原型模式就是一個複雜對象如果創建的開銷較大,那麼可以利用clone來複制一份對象,Java中需要clone的類實現Cloneable接口重寫clone方法,ShapeCache可以把對象緩存起來,使用時候直接從緩存中拿到,減小開銷。


結構型

適配器模式:如果有一個接口,不能完全滿足客戶的需求,在不改動原有代碼的情況下,做一個適配器,來使得接口滿足客戶需求,解決接口之前的兼容性。比如讀卡器,解決了內存卡和pc之間的問題。


裝飾器模式:動態的給一個現有的對象添加一些功能,裝飾類和現有的對象一樣實現同一個接口,並且把當前對象注入到裝飾類中,這樣裝飾類能夠調用對象,並且動態的添加功能。


代理模式:一個類代替另外一個類來爲其他對象提供服務,在調用者是不清楚實際類的存在的。


外觀模式:隱藏系統的複雜性,並且爲客戶端提供統一的界面。比如啓動電腦需要啓動cpu,memory,disk,如果暴露給客戶端需要逐一的啓動,但是如果聲明一個computer,提供給客戶端一個computer的啓動方法,對於cpu等的啓動在內部實現,就隱藏了複雜性,減小了耦合度。


橋接模式:系統可能有多維度的變化,比如有顏色,形狀維度多可能的變化,將抽象部分和實現部分分開,使他們可以獨立的變化。


組合模式:又稱整體部分模式,使得用戶對單個對象以及組合對象有一致性,多用於對樹的操作,比如樹節點有父節點,子節點的集合。


 享元模式:將對象緩存起來,避免頻繁的創建銷燬對象造成的開銷。用於對象池,連接池等。


行爲性:

策略模式:有很多算法相似,但是行爲略有不同,如果使用if else會增加較多的維護成本,講每一個算法都封裝成獨立的類,有策略類來調用。比如計算器的加減乘除都是相似的算法,可以把不同的算法進行不同的封裝。


模板方法模式:抽象類完成功能的骨架,通用性的代碼,差異性的部分定義成抽象方法,由不同的子類去實現,如此完成通用代碼的重用,以及差異個性化的代碼各自實現。比如解析全國各地的xml計價文件,流程大致相似,各地的差異化各自實現。


觀察者模式:一個對象狀態改變時,同時通知對此對象有依賴的所有對象。被觀察者維護所有觀察者的集合,觀察者者實現統一的相應接口,這樣當被觀察者變化時,能夠遍歷的通知觀察者做出響應。


迭代器模式:封裝了對對象的遍歷,提供自己的方法,而不需要暴露對象內部的結構。比如iterator


責任鏈模式:一個請求處理,每一個接收方都包含下一個接收方的信息,形成一條鏈,知道找到能夠處理該請求的方法。解耦發送者和接收者,只需要把請求給接收者,不管具體鏈上的那個方法處理請求。


命令模式:定義命令接口,不同的命令分別實現這個接口,將每一個請求都封裝成對象,消息的發送者和接受者,都是對對象操作,新增命令也比較容易。各種命令形式的場景都可以使用命令模式。


備忘錄模式:在不破壞原對象封裝的情況下,可以對對象進行備份,隨時可以對對象進行恢復。打遊戲存檔,數據庫的事務都是用類似的模式。


狀態模式:代碼中有大量的狀態的語句,並且不同狀態有不通過的行爲的情況。將不同的狀態進行封裝,同時實現一個狀態的接口,實現一個統一的行爲方法。即每一種狀態可以注入上下文,方式的變化。


21 訪問者模式:一個對象要做不相關的幾個類的操作,爲了不污染這幾個類,這幾個類分別繼承一個接受訪問者對象的接口,這樣多個對象保持原有的結構,對象和各個類的關係都在訪問者對象中操作。


22 中介者模式:多個對象之間如果相互引用,那麼會形成網狀關係,如果一個對象修改,那麼相關的都需要改。中介者模式,就是形成一個公共的中介者,所有的對象是星狀關係,各個對象只和中介有關係,不用和其他對象直接關聯。


23 解釋器模式:指定一種語言,並且提供解析語言的表達式。

     


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