![創(chuàng)新設計模式之策略模式講義_第1頁](http://file4.renrendoc.com/view/aca1f2a29a817bdfad05399f74b697a2/aca1f2a29a817bdfad05399f74b697a21.gif)
![創(chuàng)新設計模式之策略模式講義_第2頁](http://file4.renrendoc.com/view/aca1f2a29a817bdfad05399f74b697a2/aca1f2a29a817bdfad05399f74b697a22.gif)
![創(chuàng)新設計模式之策略模式講義_第3頁](http://file4.renrendoc.com/view/aca1f2a29a817bdfad05399f74b697a2/aca1f2a29a817bdfad05399f74b697a23.gif)
![創(chuàng)新設計模式之策略模式講義_第4頁](http://file4.renrendoc.com/view/aca1f2a29a817bdfad05399f74b697a2/aca1f2a29a817bdfad05399f74b697a24.gif)
![創(chuàng)新設計模式之策略模式講義_第5頁](http://file4.renrendoc.com/view/aca1f2a29a817bdfad05399f74b697a2/aca1f2a29a817bdfad05399f74b697a25.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、創(chuàng)新設計模式之策略模式講義目 錄 Contents1234定義和角色結構示意圖例如代碼實例說明5優(yōu)缺點環(huán)境定義: 策略模式定義了一系列的算法,并將每一個算法封裝起來,而且使它們還可以互相替換。策略模式讓算法獨立于使用它的客戶而獨立變化。定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境角色三種:策略接口:用來約束一系列具體的策略算法。策略實現(xiàn):就是具體的算法實現(xiàn)。上下文:負責和具體的策略類交互,通常上下文會持有一個真正的策略實現(xiàn)。還可以讓具體的策略類來獲取上下文的數(shù)據(jù),甚至讓具體的策略類來獲取上下文的數(shù)據(jù)。角色之間的關系:上下文使用策略接口來調(diào)用具體的策略實現(xiàn)定義的算法。定義和角色結構示意圖例如
2、代碼實例說明優(yōu)缺點和環(huán)境目 錄 Contents1234定義和角色結構示意圖例如代碼實例說明5優(yōu)缺點和環(huán)境策略實現(xiàn)算法實現(xiàn)定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境目 錄 Contents1234定義和角色結構示意圖例如代碼實例說明5優(yōu)缺點和環(huán)境1、策略接口:定義算法的接口:調(diào)用具體的算法定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境2、策略實現(xiàn):在具體的算法實現(xiàn)中,定義了三個,分別是ConcreteStrategyA、ConcreteStrategyB、ConcreteStrategyC,例如非常簡單,由于沒有具體算法的實現(xiàn),三者也就是名稱不同,例如代碼如下:定義和角色結構示意圖例如
3、代碼實例說明優(yōu)缺點和環(huán)境3、上下文的實現(xiàn):例如代碼如下例如上文提到A,B,C三個對象定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境目 錄 Contents1234定義和角色結構示意圖例如代碼實例說明5優(yōu)缺點和環(huán)境實例:報價管理問題向客戶報價,對于銷售部門的人來講,這是一個非常重大、非常復雜的問題,對不同的客戶要報不同的價格,例如有新客戶、老客戶、大客戶等。為了演示的簡潔性,假定現(xiàn)在需要實現(xiàn)一個簡化的報價管理,實現(xiàn)如下的功能:1對普通客戶或者是新客戶報全價2對老客戶報的價格,統(tǒng)一折扣5%3對大客戶報的價格,統(tǒng)一折扣10%該怎么實現(xiàn)呢?定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境1、不用模式
4、的解決方案:這種解決方案存在的問題:價格類包含了所有計算報價的算法,使得價格類,尤其是報價這個方法比較龐雜,難以維護。定義了計算價格的算法定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境2、不用模式的修改方案:把這些算法從報價方法里面拿出去,形成獨立的方法。據(jù)此寫出如下的實現(xiàn)代碼,例如代碼如下:把算法從報價方法里拿出去,形成獨立的方法,這里調(diào)用了算法定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境新客戶和普通客戶老客戶大客戶這樣做的優(yōu)點是:容易擴展,較好的維護。缺點是:如果有100種情況時,怎么做?定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境3、策略模式下的解決方案:要使用策略模式來重寫前
5、面報價的例如,大致有如下改變:首先需要定義出算法的接口。策略接口然后把各種報價的計算方式單獨出來,形成算法類。策略實現(xiàn)對于Price這個類,把它當做上下文,在計算報價的時候,不再需要判斷,直接使用持有的具體算法進行運算即可。選擇使用哪一個算法的功能挪出去,放到外部使用的客戶端去。上下文實例的結構圖定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境先看策略接口,例如代碼如下:定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境 接下來看看具體的算法實現(xiàn),不同的算法,實現(xiàn)也不一樣,先看為新客戶或者是普通客戶計算應報的價格的實現(xiàn),例如代碼如下:定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境老客戶計算應報
6、的價格的實現(xiàn),例如代碼如下:定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境大客戶計算應報的價格的實現(xiàn),例如代碼如下:定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境接下來看看上下文的實現(xiàn),也就是原來的價格類,它的變化比較大,主要有:原來那些私有的,用來做不同計算的方法,已經(jīng)去掉了,獨立出去做成了算法類原來報價方法里面,對具體計算方式的判斷,去掉了,讓客戶端來完成選擇具體算法的功能新添加持有一個具體的算法實現(xiàn),通過構造方法傳入原來報價方法的實現(xiàn),變化成了轉(zhuǎn)調(diào)具體算法來實現(xiàn)定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境寫個客戶端來測試運行一下,例
7、如代碼如下:定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境目 錄 Contents1234定義和角色結構示意圖例如代碼實例說明5優(yōu)缺點和環(huán)境優(yōu)點:1、 策略模式提供了管理相關的算法族的方法。恰當使用繼承可以把公共的代碼轉(zhuǎn)移到父類里面,從而防止重復的代碼。2、 策略模式提供了可以替換繼承關系的方法。繼承可以處理多種算法或行為。3、 使用策略模式可以防止使用多重條件轉(zhuǎn)移語句。如果采用多重轉(zhuǎn)移語句將不易維護.定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境缺點:1、客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。換言之,策略模式只適用于客戶端知道所有的算法或行為的情況。2、 策略模式造成很
8、多的策略類,每個具體策略類都會產(chǎn)生一個新類,使得策略類變得很復雜。定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境應用環(huán)境: 1、實現(xiàn)某特定功能在不同的情況下采用不同的策略即算法,程序在運行時動態(tài)選擇所要采用的策略。 2、對客戶端完全隱藏算法的具體實現(xiàn)細節(jié)。 3、不同種算法之間可以彼此替換且完全獨立。定義和角色結構示意圖例如代碼實例說明優(yōu)缺點和環(huán)境設計模式之模板方法模式主講人 :孫 晗時 間:目 錄 Contents1234定義和角色結構示意圖優(yōu)缺點和環(huán)境實例說明5區(qū)別與聯(lián)系定義:一個抽象類中,有一個主方法,再定義1n個方法,這些方法可以是抽象的,也可以是具體的;定義一個類,繼承該抽象類,重寫
9、抽象方法,通過調(diào)用抽象類,實現(xiàn)對子類的調(diào)用。意圖:模板方法模式是在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中實現(xiàn)。模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟。定義和角色結構示意圖實例說明區(qū)別與聯(lián)系優(yōu)缺點和環(huán)境角色兩種:抽象模板類:定義了一個或多個抽象操作,以便讓子類實現(xiàn)。這些抽象操作叫做根本操作,它們是一個頂級邏輯的組成步驟定義并實現(xiàn)了一個模板方法具體模板類:現(xiàn)父類所定義的一個或多個抽象方法每一個抽象模板類都可以有任意多個具體模板類與之對應,而每一個具體模板類都可以給出這些抽象方法的不同實現(xiàn),從而使得頂級邏輯的實現(xiàn)各不相同定義和角色結構示意圖實例說明區(qū)別
10、與聯(lián)系優(yōu)缺點和環(huán)境方法兩種:模板方法:一個模板方法是定義在抽象類中的,把根本操作方法組合在一起形成一個總算法或一個總行為的方法。一個抽象類可以有任意多個模板方法,而不限于一個。每一個模板方法都可以調(diào)用任意多個具體方法。根本方法:抽象方法:由抽象類聲明,由具體子類實現(xiàn),java語言中以abstract關鍵字標出來。具體方法:由抽象類聲明并實現(xiàn),而子類并不實現(xiàn)或置換,java中沒有abstract關鍵字。鉤子方法:有抽象類聲明并實現(xiàn),而子類會加以擴展。通常抽象類給出的實現(xiàn)是一個空實現(xiàn),作為方法的默認實現(xiàn)。因此,此方法的存在,可以讓子類有能力對算法的不同點進行掛鉤,要不要掛鉤,由子類自行決定。定義和
11、角色結構示意圖實例說明區(qū)別與聯(lián)系優(yōu)缺點和環(huán)境目 錄 Contents1234定義和角色結構示意圖優(yōu)缺點和環(huán)境實例說明5區(qū)別與聯(lián)系定義和角色結構示意圖實例說明區(qū)別與聯(lián)系優(yōu)缺點和環(huán)境目 錄 Contents1234定義和角色結構示意圖優(yōu)缺點和環(huán)境實例說明5區(qū)別與聯(lián)系創(chuàng)立一個模板(抽象)類:Beverage(飲料)模板方法給出了邏輯的骨架,而邏輯的組成是一些相應的抽象操作,他們推遲到子類中去實現(xiàn)定義和角色結構示意圖實例說明區(qū)別與聯(lián)系優(yōu)缺點和環(huán)境這就實現(xiàn)了模板方法中最重要的類的繼承和方法的復用創(chuàng)立一個咖啡類(Coffee)和茶(Tea)類,都繼承Beverage抽象類,而各個方法的具體實現(xiàn)方式都不同定
12、義和角色結構示意圖實例說明區(qū)別與聯(lián)系優(yōu)缺點和環(huán)境運行結果測試類定義和角色結構示意圖實例說明區(qū)別與聯(lián)系優(yōu)缺點和環(huán)境目 錄 Contents1234定義和角色結構示意圖優(yōu)缺點和環(huán)境實例說明5區(qū)別與聯(lián)系優(yōu)點1模板方法模式通過把不變的行為搬移到超類,去除了子類中的重復代碼。子類實現(xiàn)算法的某些細節(jié),有助于算法的擴展和代碼復用。2通過一個父類調(diào)用子類實現(xiàn)的操作,通過子類擴展增加新的行為,符合“開放-封閉原那么。3使用模板方法是系統(tǒng)擴展性得到增強,最小化了變化對系統(tǒng)的影響。定義和角色結構示意圖實例說明區(qū)別與聯(lián)系優(yōu)缺點和環(huán)境缺點1每個不同的實現(xiàn)都需要定義一個子類,這會導致類的個數(shù)的增加,也會增加很多具體方法的數(shù)量,使設計更加抽象。2如果選用的實現(xiàn)方式不當,復用情況會很差。定義和角色結構示意圖實例說明區(qū)別與聯(lián)系優(yōu)缺點和環(huán)境應用范圍:子類具有統(tǒng)一的操作步驟或操作過程;子類具有不同的操作細節(jié);存在多個具有同樣操作步驟的應用場景,但某些具體的操作細節(jié)卻各不相同。定義和角色結構示意圖實例說明區(qū)別與聯(lián)系優(yōu)缺點和環(huán)境目 錄 Contents1234定義和角
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文學社組社方案及招生簡章范文
- 現(xiàn)代企業(yè)財務管理的全球化視角
- 全鋼爬架施工方案
- 汽車行業(yè)的品牌競爭戰(zhàn)略分析
- 國慶節(jié)小吃店鋪活動方案
- 國慶節(jié)手工干貨活動方案
- 12《富起來到強起來》第一課時說課稿-2023-2024學年道德與法治五年級下冊統(tǒng)編版001
- 2023六年級英語上冊 Unit 3 Winter in canada Lesson 14 Snow!It's Winter說課稿 冀教版(三起)
- 2024-2025學年新教材高中物理 第三章 恒定電流 第3節(jié) 測量金屬絲的電阻率說課稿 粵教版必修3
- 2024秋七年級數(shù)學上冊 第3章 一次方程與方程組3.4 二元一次方程組的應用 2列二元一次方程組解實際應用(一)說課稿(新版)滬科版
- 2025-2030年中國電動高爾夫球車市場運行狀況及未來發(fā)展趨勢分析報告
- 河南省濮陽市2024-2025學年高一上學期1月期末考試語文試題(含答案)
- 長沙市2025屆中考生物押題試卷含解析
- 2024年08月北京中信銀行北京分行社會招考(826)筆試歷年參考題庫附帶答案詳解
- 2024年芽苗菜市場調(diào)查報告
- 蘇教版二年級數(shù)學下冊全冊教學設計
- 職業(yè)技術學院教學質(zhì)量監(jiān)控與評估處2025年教學質(zhì)量監(jiān)控督導工作計劃
- 金字塔原理與結構化思維考核試題及答案
- 廣東省梅州市2023-2024學年七年級上學期期末數(shù)學試題
- 《革蘭陽性球菌》課件
- 基礎護理學導尿操作
評論
0/150
提交評論