一、寫在前面
剛開學(xué),趁著有時(shí)間把設(shè)計(jì)模式重新整理一次。學(xué)好設(shè)計(jì)模式是走向架構(gòu)的第一步,系統(tǒng)架構(gòu)應(yīng)該朝著可維護(hù),可擴(kuò)展,強(qiáng)壯性好的方向去發(fā)展。大學(xué)的最后一個(gè)學(xué)期了,時(shí)間不多了,3月初就要去騰訊實(shí)習(xí)了,還有畢設(shè)。加油 :)
二、常見的模式分類
創(chuàng)建模式
|
結(jié)構(gòu)模式
|
行為模式
|
簡單工廠模式
|
適配器模式
|
不變模式
|
工廠方法模式
|
缺省適配模式
|
策略模式
|
抽象工廠模式
|
合成模式
|
模版方法模式
|
單例模式
|
裝飾模式
|
觀察者模式
|
多例模式
|
代理模式
|
迭代子模式
|
建造模式
|
享元模式
|
責(zé)任鏈模式
|
原始模型模式
|
門面模式
|
命令模式
|
|
橋梁模式
|
備忘錄模式
|
|
|
狀態(tài)模式
|
|
|
訪問者模式
|
|
|
解釋器模式
|
|
|
調(diào)停者模式
|
三、主要模式的定義和描述
以下內(nèi)容來自《head first 設(shè)計(jì)模式》一書
模式
|
定義
|
描述
|
裝飾者
|
動態(tài)地將責(zé)任附加到對象上。若要擴(kuò)展功能,裝飾者提供了比繼承更有彈性的替代方案
|
包裝一個(gè)對象,以提供新的行為
|
狀態(tài)
|
允許對象在內(nèi)部狀態(tài)改變時(shí)改變它的行為,對象看起來好像修改了它的類
|
封裝了基本狀態(tài)的行為,并使用委托在行為之間切換
|
迭代器
|
提供一種方法順序訪問一個(gè)聚合對象中的各個(gè)元素,而又不暴露其內(nèi)部的表示
|
在對象的集合之中游走,而不暴露集合的實(shí)現(xiàn)
|
外觀(門面)
|
提供一個(gè)統(tǒng)一的接口,用來訪問子系統(tǒng)中的一群接口。外觀定義了一個(gè)高層接口,讓子系統(tǒng)更多容易使用
|
簡化一群類的接口
|
策略
|
定義算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨(dú)立于使用算法的客戶
|
封裝可以互換的行為,并使用委托來決定使用那一種
|
代理
|
為另一個(gè)對象提供一個(gè)替身或點(diǎn)位符以訪問這個(gè)對象
|
包裝對象,以控制對此對象的訪問
|
工廠方法
|
定義了一個(gè)創(chuàng)建對象的接口,但由子類決定要實(shí)例化的類是哪一個(gè)。工廠方法讓類把實(shí)例化推遲到子類
|
由子類決定要?jiǎng)?chuàng)建是具體類是哪一個(gè)
|
抽象工廠
|
提供一個(gè)接口,用于創(chuàng)建相關(guān)或依賴對象的家族,而不需要明確指定具體類
|
允許客戶創(chuàng)建對象的家族,而無需指定他們的具體類
|
適配器
|
將一個(gè)類的接口,轉(zhuǎn)換成客戶期望另一個(gè)接口。適配器讓原來不兼容的類可以合作無間
|
封裝對象,并提供不同的接口
|
觀察者
|
在對象之間定義一對多的依賴,這樣一來,當(dāng)一個(gè)對象改變時(shí),依賴它的對象都會收到通知并自動更新
|
讓對象能夠在狀態(tài)改變時(shí)被通知
|
模板方法
|
在一個(gè)方法中定義一個(gè)算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變算法結(jié)構(gòu)的情況下,重新定義算法中的某些步驟
|
由子類決定如何實(shí)現(xiàn)一個(gè)算法中的步驟
|
組合
|
允許你將對象組成樹結(jié)構(gòu)來表現(xiàn)“整體/部分”的層次結(jié)構(gòu)。組合能讓客戶以一致的方式處理個(gè)別對象和對象組合
|
客戶用一致的方式處理對象集合和單個(gè)對象
|
單件(單體)
|
確保一個(gè)類只有一個(gè)實(shí)例,并提供全局訪問點(diǎn)
|
確保只有一個(gè)對象被創(chuàng)建
|
命令
|
將請求封裝成對象,這可以讓你使用不同的請求、隊(duì)列,或者日志請求來參數(shù)化其它對象。命令模式也可以支持撤銷操作
|
封裝請求為對象
|
四、參考資料
IBM社區(qū)設(shè)計(jì)模式方面資料: http://www.ibm.com/developerworks/cn/java/design/
常見OO原則:http://m.tkk7.com/jicheng687/archive/2011/02/13/344174.html
--END--