1. 程式人生 > >C++ 23種設計模式

C++ 23種設計模式

        隨著工作的開展,越來越感覺到程式架構的重要性,怎樣能看懂別人的程式,怎樣讓自己的程式更容易被被人看懂,這是開發過程中時時刻刻會遇到的問題,無意中遇到了設計模式,正和我意,正是我需要的,順道整理學習,構建個人知識體系。

個人對設計模式的理解:程式碼結構清晰,方便處理問題。優化資源,提高效率。
帶著問題去學習,選擇合適的設計模式,進行程式設計練習。

設計模式總共分為三類:1、建立型,2、結構型,3、行為型

建立型:

一、Singleton,單例模式:保證一個類只有一個例項,並提供一個訪問它的全域性訪問點 ;     
應用場景:一個無狀態的類使用單例模式節省記憶體資源。 

    二、Abstract Factory,抽象工廠:
 應用場景:

    三、Factory Method,工廠方法:

應用場景:

    四、Builder,建造模式:將一個複雜物件的構建與他的表示相分離,使得同樣的構建過程可以建立不同的表示。     

應用場景:一個類的各個組成部分的具體實現類或者演算法經常面臨著變化,但是將他們組合在一起的演算法卻相對穩定。提供一種封裝機制 將穩定的組合演算法於易變的各個組成部分隔離開來。 
    五、Prototype,原型模式:用原型例項指定建立物件的種類,並且通過拷貝這些原型來建立新的物件。       
應用場景:用new建立一個物件需要非常繁瑣的資料準備或者許可權 


行為型:

    六、Iterator,迭代器模式:
  應用場景:迭代。 

    七、Observer,觀察者模式:
應用場景: 類似於監聽作用,某個例項的變化將影響其他多個物件。 

    八、Template Method,模板方法:定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中,TemplateMethod使得子類可以不改變一個演算法的結構即可以重定義該演算法的某些特定步驟。  
應用場景:一個操作的步驟穩定,而具體細節的改變延遲的子類 

     九、Command,命令模式:將一個請求封裝為一個物件,從而使你可以用不同的請求對客戶進行引數化,對請求排隊和記錄請求日誌,以及支援可撤銷的操作。       
應用場景:將命令者與執行者完全解耦。 

    十、State,狀態模式:允許物件在其內部狀態改變時改變他的行為。物件看起來似乎改變了他的類。           
應用場景:一個物件的內部狀態改變時,他的行為劇烈的變化。 

    十一、Strategy,策略模式:定義一系列的演算法,把他們一個個封裝起來,並使他們可以互相替換,本模式使得演算法可以獨立於使用它們的客戶。       應用場景: 
   十二、China of Responsibility,職責鏈模式:使多個物件都有機會處理請求,從而避免請求的送發者和接收者之間的耦合關係 

    十三、Mediator,中介者模式:用一箇中介物件封裝一些列的物件互動。 \

應用場景:

    十四、Visitor,訪問者模式:表示一個作用於某物件結構中的各元素的操作,它使你可以在不改變各元素類的前提下定義作用於這個元素的新操作。

應用場景:

    十五、Interpreter,直譯器模式:給定一個語言,定義他的文法的一個表示,並定義一個直譯器,這個直譯器使用該表示來解釋語言中的句子。 】

應用場景:

    十六、Memento,備忘錄模式:在不破壞物件的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態。

應用場景:

結構型:

    十七、Composite,組合模式:將物件組合成樹形結構以表示部分整體的關係,Composite使得使用者對單個物件和組合物件的使用具有一致性。

應用場景: 

    十八、Facade,外觀模式:為子系統中的一組介面提供一致的介面,fa?ade提供了一高層介面,這個介面使得子系統更容易使用。

應用場景:

    十九、Proxy,代理模式:為其他物件提供一種代理以控制對這個物件的訪問

應用場景:

    二十、Adapter,介面卡模式:將一類的介面轉換成客戶希望的另外一個介面,Adapter模式使得原本由於介面不相容而不能一起工作那些類可以一起工作。

應用場景: 

    二十一、Decrator,裝飾模式:動態地給一個物件增加一些額外的職責,就增加的功能來說,Decorator模式相比生成子類更加靈活。

應用場景:

    二十二、Bridge,橋模式:將抽象部分與它的實現部分相分離,使他們可以獨立的變化。

應用場景:

    二十三、Flyweight,享元模式
應用場景:


行為型:未完善,,,待續。。。。。