天天看點

面向對象設計模式

一句話感悟:目的:高内聚、低耦合

底層提供抽象接口,上層提供資料存儲和實作,組合先于繼承 (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模式:以聚合的形式給類的方法添加修飾。通過組合的方式給類添加方法,而不是直接添加到類中。可以避免給父類添加新的接口。适用于需要給一個類添加屬性形成一個新的擴充類的情況。

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模式:

本文轉自 a_liujin 51CTO部落格,原文連結:http://blog.51cto.com/a1liujin/1697987,如需轉載請自行聯系原作者

繼續閱讀