HeadFirst 設(shè)計(jì)模式(1)_第1頁(yè)
HeadFirst 設(shè)計(jì)模式(1)_第2頁(yè)
HeadFirst 設(shè)計(jì)模式(1)_第3頁(yè)
HeadFirst 設(shè)計(jì)模式(1)_第4頁(yè)
HeadFirst 設(shè)計(jì)模式(1)_第5頁(yè)
已閱讀5頁(yè),還剩63頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Design Pattern(設(shè)計(jì)模式)第一章:Strategy Pattern策略模式Wang Ying-hongTechnical ConsultantHP Technical Service 再增加新鴨? 設(shè)計(jì)原則1:封裝可變性識(shí)別程序中可變的特征識(shí)別程序中可變的特征, 并將它們與不變的特征分離開(kāi)來(lái)并將它們與不變的特征分離開(kāi)來(lái)GOF:“考慮你的設(shè)計(jì)中什么可能會(huì)發(fā)生變化.考慮你允許什么發(fā)生變化而不讓這一變化導(dǎo)致重新設(shè)計(jì)” 一種可變性不應(yīng)散落在代碼的很多角落 一種可變性不應(yīng)當(dāng)與另一種可變性混合在一起設(shè)計(jì)原則1:封裝可變性識(shí)別程序中可變的特征識(shí)別程序中可變的特征, 并將它們與不變的特征分離開(kāi)來(lái)

2、并將它們與不變的特征分離開(kāi)來(lái)設(shè)計(jì)原則1:封裝可變性識(shí)別程序中可變的特征識(shí)別程序中可變的特征, 并將它們與不變的特征分離開(kāi)來(lái)并將它們與不變的特征分離開(kāi)來(lái) 維護(hù),維護(hù), 擴(kuò)展,擴(kuò)展, 復(fù)用?復(fù)用?策略模式的優(yōu)點(diǎn) (1)策略模式提供了管理相關(guān)的算法族的辦策略模式提供了管理相關(guān)的算法族的辦法。法。 (2)策略模式提供了可以替換繼承關(guān)系替換繼承關(guān)系的辦法。 (3)使用策略模式可以避免使用多重條件轉(zhuǎn)避免使用多重條件轉(zhuǎn)移語(yǔ)句移語(yǔ)句。策略模式的缺點(diǎn) (1) 客戶端必須知道所有的策略類,并自行決定使用哪一個(gè)策略類。 (2)策略模式造成很多的策略類, 增加了對(duì)象的數(shù)目。 (3)增加了通信開(kāi)銷在什么情況下應(yīng)當(dāng)使用策

3、略模式 (1)如果在一個(gè)系統(tǒng)里面有許多類,它們之間的區(qū)別僅在于它們的行為,那么使用策略模式可以動(dòng)態(tài)地讓一個(gè)對(duì)象在許多行為中選擇一種行為。 (2)一個(gè)系統(tǒng)需要?jiǎng)討B(tài)地在幾種算法中選擇一種。 (3)一個(gè)系統(tǒng)的算法使用的數(shù)據(jù)不可以讓客戶端知道。 (4)如果一個(gè)對(duì)象有很多的行為,如果不用恰當(dāng)?shù)哪J剑@些行為就只好使用多重的條件選擇語(yǔ)句來(lái)實(shí)現(xiàn)。 策略模式中體現(xiàn)了多個(gè)設(shè)計(jì)原則 設(shè)計(jì)原則1: 封裝變化 面向接口可維護(hù)可維護(hù)+可擴(kuò)展可擴(kuò)展+可復(fù)用可復(fù)用迪米特邏輯物理一致封裝變化依賴倒置里氏法則組合復(fù)用封封閉閉開(kāi)開(kāi)放放設(shè)設(shè) 計(jì)計(jì) 模模 式式 松耦合松耦合 高內(nèi)聚高內(nèi)聚.OOP: 封裝,繼承,多態(tài)封裝,繼承,多態(tài)。

4、 設(shè)計(jì)原則設(shè)計(jì)原則2:針對(duì)接口編程,而非針對(duì)實(shí)現(xiàn)針對(duì)接口編程,而非針對(duì)實(shí)現(xiàn) 接口使可插入性變得可能。1. Client不必知道其使用對(duì)象的具體所屬類。2. 一個(gè)對(duì)象可以很容易地被(實(shí)現(xiàn)了相同接口的)的另一個(gè)對(duì)象所替換。3. 對(duì)象間的連接不必硬綁定(hardwire)到一個(gè)具體類的對(duì)象上,因此增加了靈活性。4. 松散藕合(loosens coupling)。5. 增加了重用的可能性。6. 提高了(對(duì)象)組合組合的機(jī)率,因?yàn)楸话瑢?duì)象可以是任何實(shí)現(xiàn)了一個(gè)指定接口的類。設(shè)計(jì)原則設(shè)計(jì)原則2:針對(duì)接口編程,而非針對(duì)實(shí)現(xiàn)針對(duì)接口編程,而非針對(duì)實(shí)現(xiàn)面向接口可維護(hù)可維護(hù)+可擴(kuò)展可擴(kuò)展+可復(fù)用可復(fù)用迪米特邏輯物

5、理一致封裝變化依賴倒置里氏法則組合復(fù)用封封閉閉開(kāi)開(kāi)放放設(shè)設(shè) 計(jì)計(jì) 模模 式式 松耦合松耦合 高內(nèi)聚高內(nèi)聚.OOP: 封裝,繼承,多態(tài)封裝,繼承,多態(tài)。設(shè)計(jì)原則3: 組合優(yōu)先組合(has a)比繼承(is a)更好一些設(shè)計(jì)原則3: 組合優(yōu)先 繼承復(fù)用 優(yōu)點(diǎn) 可以很容易的修改或擴(kuò)展父類的實(shí)現(xiàn)設(shè)計(jì)原則3:組合優(yōu)先 繼承復(fù)用的缺點(diǎn) 繼承破壞封裝,因?yàn)楦割惖膶?shí)現(xiàn)細(xì)節(jié)完全暴露給子類(白盒復(fù)用) 父類的實(shí)現(xiàn)發(fā)生改變,則子類必受牽連 繼承是靜態(tài)的,不能在運(yùn)行時(shí)發(fā)生改變,不靈活設(shè)計(jì)原則3:組合優(yōu)先 組合復(fù)用的優(yōu)點(diǎn) 不破壞封裝,這種復(fù)用是黑盒復(fù)用,因?yàn)槌蓡T對(duì)象的內(nèi)部細(xì)節(jié)對(duì)新對(duì)象保密 所需依賴少(只依賴接口) 可以

6、把成員對(duì)象動(dòng)態(tài)替換為另一個(gè)類型相同的對(duì)象設(shè)計(jì)原則3:組合優(yōu)先 組合復(fù)用的缺點(diǎn) 對(duì)象數(shù)量會(huì)增加 使用委托(delegation)會(huì)使得系統(tǒng)復(fù)雜設(shè)計(jì)原則3:組合優(yōu)先 例:汽車有很多種,小轎車、貨車、客車,有的車是客貨兩用,有的車水陸兩用 如果使用繼承來(lái)描述: 一旦增加新的汽車種類或用途,都需要大量改動(dòng)原有代碼設(shè)計(jì)原則3:組合優(yōu)先 使用“組合”思路考慮問(wèn)題 “汽車”擁有某種或某些“用途” “汽車”和“用途”獨(dú)立變化,互不影響面向接口可維護(hù)可維護(hù)+可擴(kuò)展可擴(kuò)展+可復(fù)用可復(fù)用迪米特邏輯物理一致封裝變化依賴倒置里氏法則組合復(fù)用封封閉閉開(kāi)開(kāi)放放設(shè)設(shè) 計(jì)計(jì) 模模 式式 松耦合松耦合 高內(nèi)聚高內(nèi)聚.OOP: 封

7、裝,繼承,多態(tài)封裝,繼承,多態(tài)。補(bǔ)充補(bǔ)充 設(shè)計(jì)原則設(shè)計(jì)原則4:開(kāi):開(kāi)-閉原則閉原則 “開(kāi)-閉”原則 Bertrand Meyer: “Software should be open for extension, but closed for modification” 軟件應(yīng)該對(duì)擴(kuò)展開(kāi)放,軟件應(yīng)該對(duì)擴(kuò)展開(kāi)放, 對(duì)修改關(guān)閉對(duì)修改關(guān)閉 解釋 在設(shè)計(jì)一個(gè)軟件的時(shí)候,應(yīng)當(dāng)使這個(gè)軟件可以在不被修改的前提下擴(kuò)展 已有模塊,尤其是最重要的抽象層模塊不能動(dòng):保證穩(wěn)定性和延續(xù)性 可以擴(kuò)展新模塊:增加新行為,保證靈活性設(shè)計(jì)原則4:開(kāi)-閉原則 Strategy模式對(duì)“開(kāi)-閉”原則的支持設(shè)計(jì)原則4:開(kāi)-閉原則 玉帝遵

8、照“開(kāi)-閉”原則維護(hù)天庭秩序 當(dāng)年孫悟空大鬧天空,向天庭發(fā)出挑戰(zhàn):“皇帝輪流做,明年到我家.只教他搬出去,將天宮讓與我!” 太白金星給玉皇大帝建議道:“降一道招安圣旨,把他宣來(lái)上界.與他籍名在箓.一則不動(dòng)眾勞師,二則收仙有道也?!痹O(shè)計(jì)原則4:開(kāi)-閉原則 分析 “不動(dòng)眾勞師”、不破壞天規(guī)就是“閉” 收仙有道就是“開(kāi)” 招安,就是玉帝的“開(kāi)-閉”原則:既讓孫悟空滿意,又不必更改天庭現(xiàn)有的秩序設(shè)計(jì)原則4:開(kāi)-閉原則 分析 現(xiàn)有的天庭秩序是系統(tǒng)的最高抽象層 弼馬溫這個(gè)職位只是具體的實(shí)現(xiàn)層 招安的關(guān)鍵就是不允許更改現(xiàn)有的天庭秩序,但是允許將妖猴納入到文武百官中,從而擴(kuò)展了這一秩序的具體實(shí)現(xiàn)設(shè)計(jì)原則4:開(kāi)-閉原則 Bertrand Meyer 對(duì)象技術(shù)大師 法國(guó)工程院院士 蘇黎世工學(xué)院計(jì)算機(jī)系教授 發(fā)明了Eiffel語(yǔ)言和按契約設(shè)計(jì)(Design by Contract)的思想 早年參與了Z形式語(yǔ)言的設(shè)計(jì)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論