23種設計模式:現代C++實現 V2.0
-
單一職責原則
-
一個類只有一個職責,不應既做這又做那,這樣的好處是:
-
降低了類的複雜性
-
提高了程式碼的可讀性,可維護性
-
降低了因變更帶來的風險
-
-
里氏替換原則
-
一個子類必須實現父類的所有方法
-
一個子類可以擁有父類沒有的方法
-
在所有需要父類物件的地方都可以用子類的物件替換而不會出現問題
-
-
依賴倒置原則
-
高層模組不應該依賴底層模組
-
抽象不應該依賴於細節
-
實現應該依賴於抽象
- 面向介面程式設計
-
-
介面隔離原則
- 一個類可以有多個方法,但如果打算向外部提供部分方法,則把這些方法實現為介面,返回介面型別
-
迪米特法則
- 最少知識法則
- 只與你直接的朋友通訊
- 一個類不應該與過多的類發生聯絡
- 如果一個類需要呼叫第三個類的方法,可以加入中間者,轉發呼叫這個方法
-
開關原則
- 最重要的一個核心原則
- 一個軟體實體應該對擴充套件開放,對修改封閉
-
組合優先於繼承
-
把變與不變的事物分開
-
委託,委託,委託
-
你不會用到它
目前隨著程式語言的進步,很多模式已經沒有存在的必要了!
設計模式是某種程度上類C++這種靜態語言在動態性方面的不足,隨著各種語言動態性的增強(C++的function+bind),很多模式已經沒有存在的必要了(參考陳碩的《Linux多執行緒服務端程式設計》)
1 建立型模式
抽象工廠Abstract Factory 1-1
意圖:用工廠類的不同成員函式來返回不同型別的物件。這樣一來使用者不必記住各個類的名字。
這個模式有個明顯的問題:新增新類要修改原來的程式碼!
工廠方法Factory Method 1-2
意圖:定義一個建立物件的介面,讓子類決定例項化哪一個類
這個模式就是想突破抽象工廠修改原始碼的問題。使用C++模板就可以輕鬆實現新型別的建立工作
抽象工廠與工廠方法可以被std::function+std::bind代替,所以不再需要大動干戈的設計工廠方法了,參考下面的連結:
另外std::make_pair std::make_shared 均可以理解為工廠方法。
單利模式Singleton 1-5
意圖:保證一個類僅有一個例項,並提供一個全域性訪問點。
多執行緒的單利需要加鎖訪問instance()方法,關於加鎖的示例程式碼參考:多執行緒同步的開發
例子:Boost中的單利模式2 結構型模式
介面卡模式Adapter 2-1
意圖:將一個類的介面轉換為客戶希望的另一個介面。
例子:用deque實現棧或者佇列
橋接模式Bridge 2-2
意圖:將抽象部分與實現部分分離,使它們都可以獨立的變化。(核心在抽象,為了應對變更才有了不同的實現)
例子:Windows各種視窗使用成員指標來指向具體的實現類
組合模式Composite 2-3
意圖:將物件組合成樹形結構以表示“整體-部分”的層次結構,組合模式使得使用者對單個物件的使用和組合物件的使用具有一致性。
例子:表示式求值(一元運算表示式、二元運算表示式、葉子節點)
代理模式Proxy 2-7
意圖:為物件提供一種代理以控制對這個物件的訪問。(核心是被代理物件,通常是控制建立、初始化、釋放等)
例子:智慧指標,shared_ptr基本用法 weak_ptr基本用法
3 行為模式
觀察者模式Observer 3-7
策略模式Strategy 3-9
意圖:定義一個系列演算法,把他們一個個封裝起來,並且使它們可互相替換。使得演算法可以獨立於使用它的客戶。
策略模式本質上等價於工廠方法模式。可以通過多型來實現隨意指定哪個演算法。將來增加了新的演算法,原來的程式正常執行。
例子:策略模式Strategy
相關文章
- GoF 23種設計模式的Go實現 | Gopher Daily (20Go設計模式AI
- Go語言實現的23種設計模式之結構型模式Go設計模式
- 23種設計模式設計模式
- 23個經典設計模式的Swift實現設計模式Swift
- 實踐GoF的23種設計模式:命令模式Go設計模式
- 23種設計模式(八)-原型設計模式設計模式原型
- 23種設計模式(二)---策略設計模式設計模式
- 23種設計模式(四)-代理模式設計模式
- GOF23--23種設計模式(一)Go設計模式
- 23種設計模式(七)-狀態設計模式設計模式
- 23種設計模式(四)- 模板方法設計模式設計模式
- 23種設計模式簡介設計模式
- 23種軟體設計模式設計模式
- 設計模式——原型模式(C++)——演算法實現設計模式原型C++演算法
- 23種設計模式-原型模式(3)設計模式原型
- 【23種設計模式】外觀模式(十)設計模式
- 23種設計模式:03裝飾模式設計模式
- 23種設計模式之組合模式設計模式
- 23種設計模式(抽象工廠模式)設計模式抽象
- 【圖解設計模式系列】23句話總結23種設計模式圖解設計模式
- 23種設計模式(六)-責任鏈設計模式設計模式
- 實踐GoF的23種設計模式:裝飾者模式Go設計模式
- 23種設計模式之模板方法設計模式
- 畫江湖之23種設計模式設計模式
- 淺談23種設計模式之單例設計模式設計模式單例
- 23種設計模式(一)---簡單工廠設計模式設計模式
- 23種設計模式之介面卡模式設計模式
- 23種設計模式之直譯器模式設計模式
- 23種設計模式(三)--裝飾器模式設計模式
- 23種設計模式之——動態代理模式設計模式
- 實驗1 現代C++程式設計初體驗C++程式設計
- C++程式設計實現C++程式設計
- Java設計模式——實現單例模式的七種方式[JZOF]Java設計模式單例
- 重溫23種設計模式(11):原型模式設計模式原型
- java23種設計模式——八、組合模式Java設計模式
- 23種設計模式之代理模式(靜態代理)設計模式
- java23種設計模式——五、建造者模式Java設計模式
- java23種設計模式—— 二、單例模式Java設計模式單例
- java23種設計模式——三、工廠模式Java設計模式