c++設計模式總結


具體代碼就不貼出來了   通俗易懂的理解方式      原創

 

c++設計模式:

簡單工廠模式

工廠模式有一種非常形象的描述,建立對象的類就如一個工廠,而需要被建立的對象就是一個個產品;在工廠中加工產品,使用產品的人,不用在乎產品是如何生產出來的。從軟件開發的角度來說,這樣就有效的降低了模塊之間的耦合。

使用情景: 
  在不確定會有多少個處理操作時應該考慮使用簡單工廠模式,如針對同樣的接收到的數據,處理的邏輯可能會不同,可能以后還會增加新的操作。 
案例: 
如果實現計算器的功能時,對於同樣的輸入數據,可能執行加、減、乘、除,甚至其他的功能。因此可以抽象出一個操作的抽象類或是接口,提供一個統一的處理方法(此處為process),然后每種操作創建出一個子類出來。而判斷具體使用哪個具體的實現類是在工廠類中進行判斷的(將存放操作的變量傳遞給工廠的生產方法)。工廠類始終返回的是這個抽象類,這樣如果對原有功能進行更改或是新添加新的功能,也不會對原來的其他類做修改,只編譯修改的那個類或是新的類就可以了。 
這樣就做到了把耦合降到最低,同時也便於維護。 

 

 

 

簡單工廠:針對同樣的數據,不同的操作用同一個接口

工廠方法:針對同樣的數據,不同的操作用不同的接口

抽象工廠:針對不同的數據,不同的操作用不同的接口

 

策略模式:依賴c++的多態,抽象類的指針可以訪問所有子類對象,(純虛函數),可以用一個指針訪問所有策略的實現類

 

 

單例模式:單例模式確保某一個類只有一個實例,而且自行實例化並向整個系統提供這個實例單例模式(不能讓一個程序打開兩次  如:不能同時打開2個迅雷  迅雷用的單例模式)

 

訪問者模式:適用於數據結構相對未定的系統,它把數據結構和作用於結構上的操作之間的耦合解脫開,使得操作集合可以相對自由的演化。訪問者模式使得增加新的操作變的很容易,就是增加一個新的訪問者類。訪問者模式將有關的行為集中到一個訪問者對象中(做任何更改不需要修改基類,不依賴虛函數)

 

觀察者模式:定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態上發生變化時,會通知所有觀察者對象,使他們能夠自動更新自己。(QT的信號機制,Windows的消息機制都應用了觀察者模式,還有訂閱郵件,郵件到了就會給你發郵件)

 

建造者模式:使得產品內部表象可以獨立地變化,客戶不必知道產品內部組成的細節。可以強制實行一種分步驟進行的建造過程。用一個接口完成不同的操作,需要對客戶的需求進行把握。(如:登陸QQ,自動選擇所在地的服務器)

 

解釋器模式:給定一個語言后,解釋器模式可以定義出其文法的一種表示,並同時提供一個解釋器。客戶端可以使用這個解釋器來解釋這個語言中的句子。(如:360讀取lua腳本,這個細節的實現就是解釋器模式)

 

命令模式:把發出命令的責任和執行命令的責任分割開,委派給不同的對象允許請求的一方和發送的一方獨立開來,使得請求的一方不必知道接收請求的一方的接口,更不必知道請求是怎么被接收,以及操作是否執行,何時被執行以及是怎么被執行的。(命令模式在客戶端與服務器之間用的最多 (C/S架構))

 

模板模式:不同的子類可以以不同的方式實現這些抽象方法,

從而對剩余的邏輯有不同的實現。先制定一個頂級邏輯框架,

而將邏輯的細節留給具體的子類去實現。(適用於本地化,做一個軟件,在日本是日文,美國是英語...)

 

橋接模式:將抽象化與實現化脫離,使得二者可以獨立的變化,

也就是指在一個軟件系統的抽象化和實現化之間使用組合聚合關系而不是繼承關系,從而使兩者可以獨立的變化。(相當於配電腦去裝機,把各個模塊組合到一起)

適配器模式:把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口原因不匹配而無法一起工作的兩個類能夠一起工作。

 

外觀模式:外部與一個子系統的通信必須通過一個統一的外觀對象進行。每一個子系統只有一個外觀類,而且此外觀類只有一個實例,也就是說它是一個單例模式。但整個系統可以有多個外觀類。(多個子系統方法都需要一個外觀類統一管理,用統一的接口方便消費者使用)

 

享元模式:享元模式大幅度的降低內存中對象的數量,使用享元模式主要是為了優化內存,相同功能可以並行使用。

 

原型模式:允許動態的增加或減少產品類,產品類不需要非得有任何事先確定的等級結構,原始模型模式適用於任何的等級結構。缺點是每一個類都必須配備一個克隆方法。

 

責任鏈模式:在責任鏈模式中,很多對象由每一個對象對其下家的引用而接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。處理者有兩個選擇:承擔責任或者把責任推給下家。一個請求可以最終不被任何接收端對象所接受。(例如:晚上去上英語課,為了好開溜坐到了最后一排,哇,前面坐了好幾個漂亮的MM哎,找張紙條,寫上“Hi, 可以做我的女朋友嗎?如果不願意請向前傳”,紙條就一個接一個的傳上去了,糟糕,傳到第一排的MM把紙條傳給老師了)

 

中介者模式:中介者模式包裝了一系列對象相互作用的方式,

使得這些對象不必相互明顯作用。從而使他們可以松散偶合。

當某些對象之間的作用發生改變時,不會立即影響其他的一些對象之間的作用。(如:TCP/IP打洞技術)

 

裝飾模式:裝飾模式以對客戶端透明的方式擴展對象的功能是繼承關系的一個替代方案,提供比繼承更多的靈活性。動態給一個對象增加功能,這些功能可以再動態的撤消。增加由一些基本功能的排列組合而產生的非常大量的功能。

 

狀態模式:意圖是讓一個對象在其內部狀態改變的時候,其行為也隨之改變。狀態模式需要對每一個系統可能取得的狀態創立一個狀態類的子類。當系統的狀態變化時,系統便改變所選的子類。(如:到了晚上12點要睡覺,到了早上8點要起床...這就是狀態)

 

合成模式:將對象組織到樹結構中,可以用來描述整體與部分的關系。合成模式就是一個處理對象的樹結構的模式。合成模式把部分與整體的關系用樹結構表示出來。(用於樹狀結構)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM