什麼是設計模式?
一說起設計模式,可能很多人都覺得很高大上的感覺,事實上,設計模式隻是針對某一類問題的最佳解決方案而已,設計模式是由許多優秀的軟體系統中總結出來的可成功複用的設計方案。我們常說的23種設計模式來自《設計模式》一書,也就是我們常說的GOF。
模式分類
1.建立型模式
建立型模式涉及對象的執行個體化,這類模式的特點是,不讓使用者代碼依賴于對象的建立或排列方式,避免使用者直接使用new運算符建立對象
GOF的23種模式有5個屬于建立型模式:
- 工廠方法模式:定義一個用于建立對象的接口,讓子類決定執行個體化哪個類。工廠方法模式使一個類的執行個體化延遲到其子類。
- 抽象工廠模式:提供一個建立一系列或互相依賴對象的接口,而無須指定它們具體的類。
- 生成器模式:将一個複雜對象的建構與它的表示分離,使同樣的建構過程可以建立不同的表示。
- 原型模式:用原型執行個體指定建立對象的種類,并且通過複制這些原型建立新的對象。
- 單例模式:保證一個類僅有一個執行個體,并提供一個通路它的全局通路點。
2.行為型模式
行為型模式涉及怎樣合理地設計對象之間的互動通信,以及怎樣合理為對象配置設定職責,讓設計富有彈性,易維護,易複用。
GOF的23種模式有11個屬于行為型模式:
- 責任鍊模式:使多個對象都有機會處理請求,進而避免請求的發送者和接收者之間的耦合關系。将這些對象連成一條鍊,并沿着這條鍊傳遞該請求,直到有一個對象處理它為止。
- 指令模式:将一個請求封裝為一個對象,進而使使用者可用不同的請求對客戶進行參數化,對請求排隊或記錄請求日志,以及支援可撤消的操作。
- 解釋器模式:給定一個語言,定義它的文法的一種表示,并定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。
- 疊代器模式:提供一種方法順序通路一個聚合對象中的各個元素,而又不需要暴露該對象的内部表示。
- 中介者模式:用一個中介對象來封裝一系列的對象互動,中介者使各對象不需要顯示地互相引用,進而使其耦合松散,而且可以獨立地改變改變他們之間的互動。
- 備忘錄模式:在不破壞封裝性的前提下,捕獲一個對象的内部狀态,并在該對象之外儲存這個狀态,這樣以後就可以将該對象恢複到原先儲存的狀态。
- 觀察者模式:定義對象間的一種一對多的依賴關系,當一個對象的狀态發生變化時,所有依賴它的對象都得到通知并被自動更新。
- 狀态模式:允許一個對象在其内部狀态改變時改變它的行為,對象看起來似乎修改了它的類。
- 政策模式:定義一系列算法,把他們獨立封裝起來,并且這些算法之間可以互相替換。政策模式主要是管理一堆有共性的算法,政策模式讓算法獨立于使用它的客戶而變化,用戶端可以根據需要,很快切換這些算法,并且保持可擴充性。
- 模闆方法模式:定義一個操作中算法的骨架,而将一些步驟延遲到子類中。模闆方法使子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
- 通路者模式: 表示一個作用于某對象結構中的各個元素的操作。它使你可以在不改變各個元素的類的前提下定義作用于這些元素的新操作。
3.結構型模式
結構型模式涉及如何組合類和對象以形成更大的結構,和類有關的結構型模式涉及如何合理地使用繼承機制;和對象有關的結構型模式涉及如何合理地使用對象組合機制。
GOF的23種模式有7個屬于結構型模式:
- 擴充卡模式:将一個類的接口轉換成客戶希望的另一個接口。Adapter模式使得原本由于接口不相容而不能一起工作的那些類可以一起工作。
- 組合模式:将對象組合成樹形結構以表示“部分-整體”的層次結構。Composite使使用者對單個對象群組合對象的使用具有一緻性。
- 代理模式:為其他對象提供一種代理以控制對這個對象的通路。
- 享元模式:運用共享技術有效地支援大量細粒度的對象。
- 外觀模式:為子系統中的一組接口提供一個一緻的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
- 橋接模式:将抽象部分與它的實作部分分離,使他們都可以獨立變化。
- 裝飾者模式: 動态地給對象添加一些額外的職責。就功能來說裝飾模式相比生成子類更為靈活。
總結
一般來說,常用的設計模式有以下八種:單例、工廠、觀察者、代理、指令、擴充卡、組合、通路者。我們在使用過程中講究的是活學活用,而不是生搬硬套,設計模式是讓我們更好程式設計的工具,而不是我們的枷鎖,這才是學習設計模式的真正目的。
參考:
https://my.oschina.net/u/2249934/blog/343441 http://mobile.51cto.com/ahot-418968.htm