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