大名鼎鼎的GOF的設(shè)計(jì)模式是最著名的一本里程碑的作品
=模式分類=

=模式之間的關(guān)系=

=如何應(yīng)用模式=
DP中的引言說(shuō)得很好,如何應(yīng)該模式來(lái)解決設(shè)計(jì)問(wèn)題
* 尋找合適的對(duì)象
對(duì)象包括數(shù)據(jù)和操作, 對(duì)象在收到請(qǐng)求(或消息)后, 執(zhí)行相應(yīng)的操作
客戶請(qǐng)求是使對(duì)象執(zhí)行操作的唯一方法, 操作又是對(duì)象改變內(nèi)部數(shù)據(jù)的唯一方法
(這就是封裝的意義,之所以強(qiáng)調(diào)對(duì)象的成員應(yīng)該是私有的原因)
OOD最困難的部分就是將系統(tǒng)分解成對(duì)象集合,因?yàn)橐紤]許多因素:
封裝,粒度,信賴關(guān)系,靈活性,性能,演化,復(fù)用等等,它們之間也互相有所影響或沖突.
設(shè)計(jì)模式可以幫助我們確定那些并不明顯的抽象和描述這些抽象的對(duì)象,如Strategy, State,etc.
==決定對(duì)象的粒度==
如何決定對(duì)象的大小,數(shù)目以及范圍呢, 設(shè)計(jì)模式亦有所幫助:
Facade 描述了怎樣用對(duì)象表示完整的子系統(tǒng)
Flyweight
Abstact Factory
Builder
Visitor
Command
==指定對(duì)象接口==
對(duì)象接口描述了該對(duì)象所能接受的全部請(qǐng)求的集合, 也就是它能夠提供哪些服務(wù)(方法)
當(dāng)給對(duì)象發(fā)送請(qǐng)求時(shí), 所引起的具體操作既與請(qǐng)求本身有關(guān),又與接受對(duì)象有關(guān)
支持相同請(qǐng)求的不同對(duì)象可能對(duì)請(qǐng)求激發(fā)的操作有不同的實(shí)現(xiàn)(動(dòng)態(tài)綁定和多態(tài))
而設(shè)計(jì)模式通過(guò)確定接口的主要組成部分及經(jīng)接口發(fā)送的數(shù)據(jù)類型, 來(lái)幫助你定義接口.
DP也許還會(huì)告訴你接口中不應(yīng)包括哪些東西, 比如Memento模式所規(guī)定的接口
DP也指定了接口之間的關(guān)系,特別地,它常要求一些類具有相同或相似的接口,或?qū)σ恍╊惖慕涌谧鞒鲆恍┫拗?br />
如Decorator, Proxy模式要求修飾/代理對(duì)象和被修飾/受代理的對(duì)象接口保持一致
Visitor模式中Vistor接口必須反映能訪問(wèn)的對(duì)象的所有類
==描述對(duì)象的實(shí)現(xiàn)==
* 類繼承還是接口繼承呢
* 針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程
==運(yùn)用復(fù)用機(jī)制==
1.優(yōu)先使用對(duì)象組合,而不是類繼承
2.委托
3.繼承和泛型的比較
==關(guān)聯(lián)運(yùn)行時(shí)刻和編譯時(shí)刻的結(jié)構(gòu)==
==設(shè)計(jì)應(yīng)支持變化==
* 設(shè)計(jì)中常出現(xiàn)的問(wèn)題
** 通過(guò)顯式地指定一個(gè)類來(lái)創(chuàng)建對(duì)象
*** Factory , Prototype
** 對(duì)特殊操作的依賴
*** Chain of Reponsibility, Command
** 對(duì)硬件和軟件平臺(tái)的依賴
*** Abstract Factory, Bridge
** 對(duì)對(duì)象表示或?qū)崿F(xiàn)的依賴
** 算法依賴
** 緊耦合
*** Abstract Factory, command, facade, mediator, observere,chain of responsibility
** 通過(guò)生成子類來(lái)擴(kuò)充功能
*** Bridge, Chain of Reponsibility, composite, Decorator, Observer, Strategy
** 不能方便地對(duì)類進(jìn)行修改
*** Adapter, Decorator, visitor
=如何選擇設(shè)計(jì)模式=
* 考慮設(shè)計(jì)模式是如何解決設(shè)計(jì)問(wèn)題的
* 瀏覽模式的意圖部分
* 研究模式怎樣互相關(guān)聯(lián)
* 研究目的相似的模式
* 檢查重新設(shè)計(jì)的原因
* 考慮你的設(shè)計(jì)中哪些是可變的

=怎樣使用設(shè)計(jì)模式=
* 大致瀏覽一遍模式
* 回頭研究結(jié)構(gòu)部分
* 看代碼示例部分
* 選擇模式參考者的名字, 使它們?cè)趹?yīng)用上下文中有意義
* 定義類
* 定義模式中專用于應(yīng)用的操作名稱
* 實(shí)現(xiàn)執(zhí)行模式中責(zé)任和協(xié)作的操作