面向对象设计模式
c++設計模式:創建型+結構型+行為型:5+7+11
一句話感悟:目的:高內聚、低耦合
底層提供抽象接口,上層提供數據存儲和實現,組合先于繼承?(FCoI:Favor?Composition?Over?Inheritance)
給每一個類添加底層抽象,又便于實現高內聚、低耦合
一、設計模式使用的5個原則:
1.開閉原則:對功能開放,對修改關閉。即修改一定不要影響到已經實現的穩定的功能。->使用繼承實現新的功能。
2.里氏替換原則:子類和父類可以相互替換,且不會影響到功能。->每個類都要繼承至接口,類之間使用接口耦合。
3.依賴倒置原則:抽象不依賴于細節實現,實現細節依賴于抽象->接口
4.接口隔離原則:接口只做必要的事情而不做與該接口功能無關的事情。
5.合成/聚合原則:多用合成/聚合,少用繼承,從而減少類之間的依賴。
二、3類設計模式
對象創建型模式:
1.factory模式:來自同一抽象底層的多個產品,可以只需使用工廠模式
2.abstractfactory模式:來自多個抽象底層的多個產品,可以用一個抽象工廠派生的多個具體工廠來管理各個不同抽象底層的產品。一個具體工廠管理一類具體產品的創建。
3.singleton模式:該對象只允許創建一次。私有構造函數+靜態構造方法
4.builder模式:大型對象的創建。需要由幾部分構建成。
5.prototype模式(深度復制模式):通過抽象層接口,實現深度復制。
需要實現復制構造函數,然后以this對象為參數調用復制構造函數new一個對象出來
?
程序結構型模式:
1.bridge模式:抽象與實現分離。以組合的形式分離需求抽象與算法實現。通過組合(代理)將需求抽象與單個算法實現分開。
?
2.adapter模式:以繼承和組合的形式轉換類的接口。調用方式為:Target*?a=new?Adapter(new?Adaptee())?通??紤]被適配者的實現不公開。適配器需要繼承Target,并實現相應方法。
3.decorator模式:以聚合的形式給類的方法添加修飾。通過組合的方式給類添加方法,而不是直接添加到類中??梢员苊饨o父類添加新的接口。適用于需要給一個類添加屬性形成一個新的擴展類的情況。
4.composite模式(組合模式):以樹的形式實現對類的訪問。類中提供對同類對象指針的存儲,形成樹狀結構,便于遞歸管理。
5.flyweight(輕量級)模式:以類廠的形式實現對象共享。flyweight類維護一個已創建的對象鏈表,每個對象自身維護一個創建時賦予的關鍵字。由flyweight工廠類統一創建指定鍵值的類,如果存在則不再創建并返回該對象指針。
?
6.facade(包裝,外觀)模式:以組合的形式實現把多個類的不同方法封裝在一個方法中。太簡單。比與子系統關系不夠密切的方法封裝在一個類中,子系統聚合該類來調用方法。這樣就不用把這些不必要的方法寫在子系統中。
?
7.proxy(代理)模式:以組合的形式封裝對其他類方法的調用。
程序行為模式:
1.template模式:(挺好:底層實現算法框架,上層實現具體細節)以繼承的方式,使底層抽象實現通用算法模版,上層實現算法細節,從而把算法細節封裝在上層。?DIP(依賴倒置)
虛函數都是通過虛表來調用的,用誰的指針就調用誰的虛函數。
2.strategy模式:以巨聚合的方式,使抽象實現算法模版,而算法細節在被組合對象中實現。從整體中提取變化的部分,使用聚合傳入變化的算法接口??梢曰谠摻涌跇嬙旌芏嗖煌乃惴?。
3.state模式:以聚合的方式,實現有限狀態機。狀態的公共數據都保存在Context上下文類中。允許一個對象在內部狀態發生改變時,改變它的行為。
4.Observer模式:建立一個一對多的依賴關系,當一個對象(subject)狀態發生變化時,通知其它對象(observer)進行相應更新。?據說是很重要的一種設計模式。
5.Memento(記憶)模式:
6.Mediator(調解)模式:專門負責提供對象間的交互,從而使得對象實現松耦合。
7.command模式:將請求的接受者放到command的具體子類concreteCommand中,當請求到來時(Invoker發出Invoke消息激活command對象),concreteCommand將處理請求交給Reveiver對象進行處理。
8.visitor模式:Visitor模式在不破壞類的前提下,為類提供增加新的新操作。Visitor模式的關鍵是雙分派(Double-Dispatch,聚合的雙方能互訪文)的技術。C++語言支持的是單分派。
9.chain?of?responsibility?模式:(多對象同時處理一個請求)描述其實就是這樣一類問題->將可能處理一個請求的對象鏈接成一個鏈,并將請求在這個鏈上傳遞,直到有對象處理該請求
10:iterator?模式:
11.interpreter模式:
轉載于:https://blog.51cto.com/a1liujin/1697987
總結
- 上一篇: Raw_Socket原始套接字
- 下一篇: JavaWeb显示器