### 【引言】
最近將設計模式中的所有代碼都敲了一遍,其中在模式大比拼的時候出現了模式分類現象,下面將我對模式類別的理解以及什么時候使用該類模式和大家分享學習。
### 【三類別分類的原因】
**創建型:**社會化的分工越來越細,自然在軟件設計方面也是如此,因此對象的創建和對象的使用分開也就成為了必然趨勢。因為對象的創建會消耗掉系統的很多資源,所以單獨對對象的創建進行研究,從而能夠高效地創建對象就是創建型模式要探討的問題。
**結構型:**在解決了對象的創建問題之后,對象的組成以及對象之間的依賴關系就成了開發人員關注的焦點,因為如何設計對象的結構、繼承和依賴關系會影響到后續程序的維護性、代碼的健壯性、耦合性等。
**行為型:**在對象的結構和對象的創建問題都解決了之后,就剩下對象的行為問題了,如果對象的行為設計的好,那么對象的行為就會更清晰,它們之間的協作效率就會提高。
### 【創建型模式】
定義:旨在將系統與它的對象創建、結合、表示的方式分離。這些設計模式在對象創建的類型、主體、方式、時間等方面提高了系統的靈活性。
主導思想:一是將系統使用的具體類封裝起來,二是隱藏這些具體類的實例創建和組合的方式。
成員:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
使用情況:
1.一個系統需要和它的對象和產品的創建相互獨立。
2.一組相關的對象被設計為一起使用。
3.隱藏一個類庫的具體實現,僅暴露它們的接口。
4.創建獨立復雜對象的不同表示。
5.一個類希望它的子類實現它所創建的對象。
6.類的實例化在運行時才指定。
7.一個類只能有一個實例,而且這個實例能在任何時候訪問到。
8.實例應該能在不修改的情況下具有可擴展性。
### 【結構型模式】
定義:借由以一貫之的方式來了解元件間的關系,以簡化設計。
成員:適配器模式、裝飾模式、橋接模式、組合模式、享元模式、代理模式、外觀模式。
使用情況:
1.需要動態地添加更多功能(裝飾模式)。
2.需要其他對象代理來控制這個對象的訪問(代理模式)。
3.需要將客戶端和子程序進行分離(外觀模式)。
4.要使用一個已經存在的類,如果接口不相同,就需要用適配器模式。
5.需求中體現部分與整體結構(組合模式)。
6.需要將抽象部分與它的實現部分分離(橋接模式)。
7.當需要生成大量細粒度的類實例來表示數據時(享元模式)。
### 【行為型模式】
定義:用來識別對象之間的常用交流模式并加以實現;如此可在進行這些交流活動時增強彈性。
成員:觀察者模式、模版方法模式、命令模式、狀態模式、職責鏈模式、解釋器模式、中介者模式、訪問者模式、策略模式、備忘錄模式、迭代器模式。
使用情況:
1.需要定義一系列算法,需要單元測試(策略模式)。
2.需要將不變行為搬移到超類,去除子類中的重復代碼,需要代碼復用(模版方法)。
3.一個對象的改變需要同時改變其他對象(觀察者模式)。
4.控制一個對象狀態轉換的條件表達式過于復雜時(狀態模式)。
5.需要將對象恢復到原先保存的狀態(備忘錄模式)。
6.需要對聚焦有多種遍歷時(迭代器模式)。
7.需要將請求操作對象與知道如何執行操作的對象分隔開(命令模式)。
8.請求者提出請求,需要鏈上對象負責處理(職責鏈模式)。
9.系統中出現了多對多的關系并且設計合理時(中介者模式)。
10.一個語言需要解釋執行,并且可將該語言中的句子表示為一個抽象語法樹(解釋器模式)。
11.需要把處理從數據結構中分離出來時(訪問者模式)。
### 【感受】
我認為這些理論知識還得在實際的運用中去領悟其中的真諦,突發自己的思維,通過他們的特點組合或創建出更好,更適合的方法,來真正解決我們所遇到的問題。