




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
設(shè)計(jì)模式之策略模式
主講人:成玉丹
時(shí)間:2016.11.14設(shè)計(jì)模式之策略模式1目錄
Contents1234定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明5優(yōu)缺點(diǎn)環(huán)境目錄Contents1234定義和角色結(jié)構(gòu)示意圖示2定義:
策略模式定義了一系列的算法,并將每一個(gè)算法封裝起來,而且使它們還可以互相替換。策略模式讓算法獨(dú)立于使用它的客戶而獨(dú)立變化。定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境定義:定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境3角色(三種):策略接口:用來約束一系列具體的策略算法。策略實(shí)現(xiàn):就是具體的算法實(shí)現(xiàn)。上下文:負(fù)責(zé)和具體的策略類交互,通常上下文會(huì)持有一個(gè)真正的策略實(shí)現(xiàn)。還可以讓具體的策略類來獲取上下文的數(shù)據(jù),甚至讓具體的策略類來獲取上下文的數(shù)據(jù)。角色之間的關(guān)系:上下文使用策略接口來調(diào)用具體的策略實(shí)現(xiàn)定義的算法。定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境角色(三種):定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)4目錄
Contents1234定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明5優(yōu)缺點(diǎn)和環(huán)境目錄Contents1234定義和角色結(jié)構(gòu)示意圖示5策略實(shí)現(xiàn)(算法實(shí)現(xiàn))定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境策略實(shí)現(xiàn)(算法實(shí)現(xiàn))定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺6目錄
Contents1234定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明5優(yōu)缺點(diǎn)和環(huán)境目錄Contents1234定義和角色結(jié)構(gòu)示意圖示71、策略接口:定義算法的接口:調(diào)用具體的算法定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境1、策略接口:定義算法的接口:調(diào)用具體的算法定義和角色結(jié)構(gòu)示82、策略實(shí)現(xiàn):在具體的算法實(shí)現(xiàn)中,定義了三個(gè),分別是ConcreteStrategyA、ConcreteStrategyB、ConcreteStrategyC,示例非常簡(jiǎn)單,由于沒有具體算法的實(shí)現(xiàn),三者也就是名稱不同,示例代碼如下:定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境2、策略實(shí)現(xiàn):在具體的算法實(shí)現(xiàn)中,定義了三個(gè),分別是Conc93、上下文的實(shí)現(xiàn):示例代碼如下例如上文提到A,B,C三個(gè)對(duì)象定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境3、上下文的實(shí)現(xiàn):示例代碼如下例如上文提到A,B,C三個(gè)對(duì)象10目錄
Contents1234定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明5優(yōu)缺點(diǎn)和環(huán)境目錄Contents1234定義和角色結(jié)構(gòu)示意圖示11實(shí)例:報(bào)價(jià)管理問題向客戶報(bào)價(jià),對(duì)于銷售部門的人來講,這是一個(gè)非常重大、非常復(fù)雜的問題,對(duì)不同的客戶要報(bào)不同的價(jià)格,例如有新客戶、老客戶、大客戶等。為了演示的簡(jiǎn)潔性,假定現(xiàn)在需要實(shí)現(xiàn)一個(gè)簡(jiǎn)化的報(bào)價(jià)管理,實(shí)現(xiàn)如下的功能:1)對(duì)普通客戶或者是新客戶報(bào)全價(jià)2)對(duì)老客戶報(bào)的價(jià)格,統(tǒng)一折扣5%3)對(duì)大客戶報(bào)的價(jià)格,統(tǒng)一折扣10%該怎么實(shí)現(xiàn)呢?定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境實(shí)例:報(bào)價(jià)管理問題向客戶報(bào)價(jià),對(duì)于銷售部門的人來講,這是一個(gè)121、不用模式的解決方案:這種解決方案存在的問題:價(jià)格類包含了所有計(jì)算報(bào)價(jià)的算法,使得價(jià)格類,尤其是報(bào)價(jià)這個(gè)方法比較龐雜,難以維護(hù)。定義了計(jì)算價(jià)格的算法定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境1、不用模式的解決方案:這種解決方案存在的問題:價(jià)格類包含了132、不用模式的修改方案:把這些算法從報(bào)價(jià)方法里面拿出去,形成獨(dú)立的方法。據(jù)此寫出如下的實(shí)現(xiàn)代碼,示例代碼如下:把算法從報(bào)價(jià)方法里拿出去,形成獨(dú)立的方法,這里調(diào)用了算法定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境2、不用模式的修改方案:把這些算法從報(bào)價(jià)方法里面拿出去,形成14新客戶和普通客戶老客戶大客戶這樣做的優(yōu)點(diǎn)是:容易擴(kuò)展,較好的維護(hù)。缺點(diǎn)是:如果有100種情況時(shí),怎么做?定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境新客戶和普通客戶老客戶大客戶這樣做的優(yōu)點(diǎn)是:容易擴(kuò)展,較好的153、策略模式下的解決方案:要使用策略模式來重寫前面報(bào)價(jià)的示例,大致有如下改變:
首先需要定義出算法的接口。(策略接口)
然后把各種報(bào)價(jià)的計(jì)算方式單獨(dú)出來,形成算法類。(策略實(shí)現(xiàn))
對(duì)于Price這個(gè)類,把它當(dāng)做上下文,在計(jì)算報(bào)價(jià)的時(shí)候,不再需要判斷,直接使用持有的具體算法進(jìn)行運(yùn)算即可。選擇使用哪一個(gè)算法的功能挪出去,放到外部使用的客戶端去。(上下文)實(shí)例的結(jié)構(gòu)圖定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境3、策略模式下的解決方案:要使用策略模式來重寫前面報(bào)價(jià)的示例16先看策略接口,示例代碼如下:定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境先看策略接口,示例代碼如下:定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例17
接下來看看具體的算法實(shí)現(xiàn),不同的算法,實(shí)現(xiàn)也不一樣,先看為新客戶或者是普通客戶計(jì)算應(yīng)報(bào)的價(jià)格的實(shí)現(xiàn),示例代碼如下:定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境接下來看看具體的算法實(shí)現(xiàn),不同的算法,定義和角色結(jié)構(gòu)18老客戶計(jì)算應(yīng)報(bào)的價(jià)格的實(shí)現(xiàn),示例代碼如下:
定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境老客戶計(jì)算應(yīng)報(bào)的價(jià)格的實(shí)現(xiàn),示例代碼如下:
定義和角色結(jié)構(gòu)示19大客戶計(jì)算應(yīng)報(bào)的價(jià)格的實(shí)現(xiàn),示例代碼如下:定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境大客戶計(jì)算應(yīng)報(bào)的價(jià)格的實(shí)現(xiàn),示例代碼如下:定義和角色結(jié)構(gòu)示意20接下來看看上下文的實(shí)現(xiàn),也就是原來的價(jià)格類,它的變化比較大,主要有:原來那些私有的,用來做不同計(jì)算的方法,已經(jīng)去掉了,獨(dú)立出去做成了算法類原來報(bào)價(jià)方法里面,對(duì)具體計(jì)算方式的判斷,去掉了,讓客戶端來完成選擇具體算法的功能新添加持有一個(gè)具體的算法實(shí)現(xiàn),通過構(gòu)造方法傳入原來報(bào)價(jià)方法的實(shí)現(xiàn),變化成了轉(zhuǎn)調(diào)具體算法來實(shí)現(xiàn)定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境接下來看看上下文的實(shí)現(xiàn),也就是原來的價(jià)格類,它的變化比較大,21定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境22寫個(gè)客戶端來測(cè)試運(yùn)行一下,示例代碼如下:定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境寫個(gè)客戶端來測(cè)試運(yùn)行一下,示例代碼如下:定義和角色結(jié)構(gòu)示意圖23目錄
Contents1234定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明5優(yōu)缺點(diǎn)和環(huán)境目錄Contents1234定義和角色結(jié)構(gòu)示意圖示24優(yōu)點(diǎn):1、策略模式提供了管理相關(guān)的算法族的辦法。恰當(dāng)使用繼承可以把公共的代碼轉(zhuǎn)移到父類里面,從而避免重復(fù)的代碼。2、策略模式提供了可以替換繼承關(guān)系的辦法。繼承可以處理多種算法或行為。3、使用策略模式可以避免使用多重條件轉(zhuǎn)移語句。如果采用多重轉(zhuǎn)移語句將不易維護(hù).定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境優(yōu)點(diǎn):定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境25缺點(diǎn):1、客戶端必須知道所有的策略類,并自行決定使用哪一個(gè)策略類。換言之,策略模式只適用于客戶端知道所有的算法或行為的情況。2、策略模式造成很多的策略類,每個(gè)具體策略類都會(huì)產(chǎn)生一個(gè)新類,使得策略類變得很復(fù)雜。定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境缺點(diǎn):定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境26應(yīng)用環(huán)境:
1、實(shí)現(xiàn)某特定功能在不同的情況下采用不同的策略即算法,程序在運(yùn)行時(shí)動(dòng)態(tài)選擇所要采用的策略。
2、對(duì)客戶端完全隱藏算法的具體實(shí)現(xiàn)細(xì)節(jié)。
3、不同種算法之間可以彼此替換且完全獨(dú)立。定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境應(yīng)用環(huán)境:定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境27設(shè)計(jì)模式之模板方法模式
主講人:孫晗
時(shí)間:2016.11.14設(shè)計(jì)模式之模板方法模式28目錄
Contents1234定義和角色結(jié)構(gòu)示意圖優(yōu)缺點(diǎn)和環(huán)境實(shí)例說明5區(qū)別與聯(lián)系目錄Contents1234定義和角色結(jié)構(gòu)示意圖優(yōu)29定義:一個(gè)抽象類中,有一個(gè)主方法,再定義1~n個(gè)方法,這些方法可以是抽象的,也可以是具體的;定義一個(gè)類,繼承該抽象類,重寫抽象方法,通過調(diào)用抽象類,實(shí)現(xiàn)對(duì)子類的調(diào)用。意圖:模板方法模式是在一個(gè)方法中定義一個(gè)算法的骨架,而將一些步驟延遲到子類中實(shí)現(xiàn)。模板方法使得子類可以在不改變算法結(jié)構(gòu)的情況下,重新定義算法中的某些步驟。定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境定義:一個(gè)抽象類中,有一個(gè)主方法,再定義1~n個(gè)方法,這些方30角色(兩種):抽象模板類:①定義了一個(gè)或多個(gè)抽象操作,以便讓子類實(shí)現(xiàn)。這些抽象操作叫做基本操作,它們是一個(gè)頂級(jí)邏輯的組成步驟②定義并實(shí)現(xiàn)了一個(gè)模板方法具體模板類:①現(xiàn)父類所定義的一個(gè)或多個(gè)抽象方法②每一個(gè)抽象模板類都可以有任意多個(gè)具體模板類與之對(duì)應(yīng),而每一個(gè)具體模板類都可以給出這些抽象方法的不同實(shí)現(xiàn),從而使得頂級(jí)邏輯的實(shí)現(xiàn)各不相同定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境角色(兩種):定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和31方法(兩種):模板方法:一個(gè)模板方法是定義在抽象類中的,把基本操作方法組合在一起形成一個(gè)總算法或一個(gè)總行為的方法。一個(gè)抽象類可以有任意多個(gè)模板方法,而不限于一個(gè)。每一個(gè)模板方法都可以調(diào)用任意多個(gè)具體方法。基本方法:抽象方法:由抽象類聲明,由具體子類實(shí)現(xiàn),java語言中以abstract關(guān)鍵字標(biāo)出來。具體方法:由抽象類聲明并實(shí)現(xiàn),而子類并不實(shí)現(xiàn)或置換,java中沒有abstract關(guān)鍵字。鉤子方法:有抽象類聲明并實(shí)現(xiàn),而子類會(huì)加以擴(kuò)展。通常抽象類給出的實(shí)現(xiàn)是一個(gè)空實(shí)現(xiàn),作為方法的默認(rèn)實(shí)現(xiàn)。因此,此方法的存在,可以讓子類有能力對(duì)算法的不同點(diǎn)進(jìn)行掛鉤,要不要掛鉤,由子類自行決定。定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境方法(兩種):定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和32目錄
Contents1234定義和角色結(jié)構(gòu)示意圖優(yōu)缺點(diǎn)和環(huán)境實(shí)例說明5區(qū)別與聯(lián)系目錄Contents1234定義和角色結(jié)構(gòu)示意圖優(yōu)33定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境34目錄
Contents1234定義和角色結(jié)構(gòu)示意圖優(yōu)缺點(diǎn)和環(huán)境實(shí)例說明5區(qū)別與聯(lián)系目錄Contents1234定義和角色結(jié)構(gòu)示意圖優(yōu)35創(chuàng)建一個(gè)模板(抽象)類:Beverage(飲料)模板方法給出了邏輯的骨架,而邏輯的組成是一些相應(yīng)的抽象操作,他們推遲到子類中去實(shí)現(xiàn)定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境創(chuàng)建一個(gè)模板(抽象)類:Beverage(飲料)模板方法給出36這就實(shí)現(xiàn)了模板方法中最重要的類的繼承和方法的復(fù)用創(chuàng)建一個(gè)咖啡類(Coffee)和茶(Tea)類,都繼承Beverage抽象類,而各個(gè)方法的具體實(shí)現(xiàn)方式都不同定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境這就實(shí)現(xiàn)了模板方法中最重要的類的繼承和方法的復(fù)用創(chuàng)建一個(gè)咖啡37運(yùn)行結(jié)果測(cè)試類定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境運(yùn)行結(jié)果測(cè)試類定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和38目錄
Contents1234定義和角色結(jié)構(gòu)示意圖優(yōu)缺點(diǎn)和環(huán)境實(shí)例說明5區(qū)別與聯(lián)系目錄Contents1234定義和角色結(jié)構(gòu)示意圖優(yōu)39優(yōu)點(diǎn)(1)模板方法模式通過把不變的行為搬移到超類,去除了子類中的重復(fù)代碼。子類實(shí)現(xiàn)算法的某些細(xì)節(jié),有助于算法的擴(kuò)展和代碼復(fù)用。(2)通過一個(gè)父類調(diào)用子類實(shí)現(xiàn)的操作,通過子類擴(kuò)展增加新的行為,符合“開放-封閉原則”。(3)使用模板方法是系統(tǒng)擴(kuò)展性得到增強(qiáng),最小化了變化對(duì)系統(tǒng)的影響。定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境優(yōu)點(diǎn)定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境40缺點(diǎn)(1)每個(gè)不同的實(shí)現(xiàn)都需要定義一個(gè)子類,這會(huì)導(dǎo)致類的個(gè)數(shù)的增加,也會(huì)增加很多具體方法的數(shù)量,使設(shè)計(jì)更加抽象。(2)如果選用的實(shí)現(xiàn)方式不當(dāng),復(fù)用情況會(huì)很差。定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境缺點(diǎn)定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境41應(yīng)用范圍:子類具有統(tǒng)一的操作步驟或操作過程;子類具有不同的操作細(xì)節(jié);存在多個(gè)具有同樣操作步驟的應(yīng)用場(chǎng)景,但某些具體的操作細(xì)節(jié)卻各不相同。定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境應(yīng)用范圍:定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境42目錄
Contents1234定義和角色結(jié)構(gòu)示意圖優(yōu)缺點(diǎn)和環(huán)境實(shí)例說明5區(qū)別與聯(lián)系目錄Contents1234定義和角色結(jié)構(gòu)示意圖優(yōu)43區(qū)別:模板方法模式與策略模式的不同在于,策略模式使用委派的方法提供不同的算法行為,而模板方法模式使用繼承的方法提供不同的算法行為。與策略模式相比,模板方法模式的中心放在了方法調(diào)用的順序上,策略模式的中心集中在方法的封裝上。
聯(lián)系:可以組合使用,模板方法重在封裝算法骨架,策略模式重在分離并封裝算法的實(shí)現(xiàn)。定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境區(qū)別:模板方法模式與策略模式的不同在于,策略模式使用委派的方44謝謝觀看請(qǐng)老師和各位同學(xué)批評(píng)指正!謝謝觀看請(qǐng)老師和各位同學(xué)批評(píng)指正!45設(shè)計(jì)模式之策略模式
主講人:成玉丹
時(shí)間:2016.11.14設(shè)計(jì)模式之策略模式46目錄
Contents1234定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明5優(yōu)缺點(diǎn)環(huán)境目錄Contents1234定義和角色結(jié)構(gòu)示意圖示47定義:
策略模式定義了一系列的算法,并將每一個(gè)算法封裝起來,而且使它們還可以互相替換。策略模式讓算法獨(dú)立于使用它的客戶而獨(dú)立變化。定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境定義:定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境48角色(三種):策略接口:用來約束一系列具體的策略算法。策略實(shí)現(xiàn):就是具體的算法實(shí)現(xiàn)。上下文:負(fù)責(zé)和具體的策略類交互,通常上下文會(huì)持有一個(gè)真正的策略實(shí)現(xiàn)。還可以讓具體的策略類來獲取上下文的數(shù)據(jù),甚至讓具體的策略類來獲取上下文的數(shù)據(jù)。角色之間的關(guān)系:上下文使用策略接口來調(diào)用具體的策略實(shí)現(xiàn)定義的算法。定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境角色(三種):定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)49目錄
Contents1234定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明5優(yōu)缺點(diǎn)和環(huán)境目錄Contents1234定義和角色結(jié)構(gòu)示意圖示50策略實(shí)現(xiàn)(算法實(shí)現(xiàn))定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境策略實(shí)現(xiàn)(算法實(shí)現(xiàn))定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺51目錄
Contents1234定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明5優(yōu)缺點(diǎn)和環(huán)境目錄Contents1234定義和角色結(jié)構(gòu)示意圖示521、策略接口:定義算法的接口:調(diào)用具體的算法定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境1、策略接口:定義算法的接口:調(diào)用具體的算法定義和角色結(jié)構(gòu)示532、策略實(shí)現(xiàn):在具體的算法實(shí)現(xiàn)中,定義了三個(gè),分別是ConcreteStrategyA、ConcreteStrategyB、ConcreteStrategyC,示例非常簡(jiǎn)單,由于沒有具體算法的實(shí)現(xiàn),三者也就是名稱不同,示例代碼如下:定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境2、策略實(shí)現(xiàn):在具體的算法實(shí)現(xiàn)中,定義了三個(gè),分別是Conc543、上下文的實(shí)現(xiàn):示例代碼如下例如上文提到A,B,C三個(gè)對(duì)象定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境3、上下文的實(shí)現(xiàn):示例代碼如下例如上文提到A,B,C三個(gè)對(duì)象55目錄
Contents1234定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明5優(yōu)缺點(diǎn)和環(huán)境目錄Contents1234定義和角色結(jié)構(gòu)示意圖示56實(shí)例:報(bào)價(jià)管理問題向客戶報(bào)價(jià),對(duì)于銷售部門的人來講,這是一個(gè)非常重大、非常復(fù)雜的問題,對(duì)不同的客戶要報(bào)不同的價(jià)格,例如有新客戶、老客戶、大客戶等。為了演示的簡(jiǎn)潔性,假定現(xiàn)在需要實(shí)現(xiàn)一個(gè)簡(jiǎn)化的報(bào)價(jià)管理,實(shí)現(xiàn)如下的功能:1)對(duì)普通客戶或者是新客戶報(bào)全價(jià)2)對(duì)老客戶報(bào)的價(jià)格,統(tǒng)一折扣5%3)對(duì)大客戶報(bào)的價(jià)格,統(tǒng)一折扣10%該怎么實(shí)現(xiàn)呢?定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境實(shí)例:報(bào)價(jià)管理問題向客戶報(bào)價(jià),對(duì)于銷售部門的人來講,這是一個(gè)571、不用模式的解決方案:這種解決方案存在的問題:價(jià)格類包含了所有計(jì)算報(bào)價(jià)的算法,使得價(jià)格類,尤其是報(bào)價(jià)這個(gè)方法比較龐雜,難以維護(hù)。定義了計(jì)算價(jià)格的算法定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境1、不用模式的解決方案:這種解決方案存在的問題:價(jià)格類包含了582、不用模式的修改方案:把這些算法從報(bào)價(jià)方法里面拿出去,形成獨(dú)立的方法。據(jù)此寫出如下的實(shí)現(xiàn)代碼,示例代碼如下:把算法從報(bào)價(jià)方法里拿出去,形成獨(dú)立的方法,這里調(diào)用了算法定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境2、不用模式的修改方案:把這些算法從報(bào)價(jià)方法里面拿出去,形成59新客戶和普通客戶老客戶大客戶這樣做的優(yōu)點(diǎn)是:容易擴(kuò)展,較好的維護(hù)。缺點(diǎn)是:如果有100種情況時(shí),怎么做?定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境新客戶和普通客戶老客戶大客戶這樣做的優(yōu)點(diǎn)是:容易擴(kuò)展,較好的603、策略模式下的解決方案:要使用策略模式來重寫前面報(bào)價(jià)的示例,大致有如下改變:
首先需要定義出算法的接口。(策略接口)
然后把各種報(bào)價(jià)的計(jì)算方式單獨(dú)出來,形成算法類。(策略實(shí)現(xiàn))
對(duì)于Price這個(gè)類,把它當(dāng)做上下文,在計(jì)算報(bào)價(jià)的時(shí)候,不再需要判斷,直接使用持有的具體算法進(jìn)行運(yùn)算即可。選擇使用哪一個(gè)算法的功能挪出去,放到外部使用的客戶端去。(上下文)實(shí)例的結(jié)構(gòu)圖定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境3、策略模式下的解決方案:要使用策略模式來重寫前面報(bào)價(jià)的示例61先看策略接口,示例代碼如下:定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境先看策略接口,示例代碼如下:定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例62
接下來看看具體的算法實(shí)現(xiàn),不同的算法,實(shí)現(xiàn)也不一樣,先看為新客戶或者是普通客戶計(jì)算應(yīng)報(bào)的價(jià)格的實(shí)現(xiàn),示例代碼如下:定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境接下來看看具體的算法實(shí)現(xiàn),不同的算法,定義和角色結(jié)構(gòu)63老客戶計(jì)算應(yīng)報(bào)的價(jià)格的實(shí)現(xiàn),示例代碼如下:
定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境老客戶計(jì)算應(yīng)報(bào)的價(jià)格的實(shí)現(xiàn),示例代碼如下:
定義和角色結(jié)構(gòu)示64大客戶計(jì)算應(yīng)報(bào)的價(jià)格的實(shí)現(xiàn),示例代碼如下:定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境大客戶計(jì)算應(yīng)報(bào)的價(jià)格的實(shí)現(xiàn),示例代碼如下:定義和角色結(jié)構(gòu)示意65接下來看看上下文的實(shí)現(xiàn),也就是原來的價(jià)格類,它的變化比較大,主要有:原來那些私有的,用來做不同計(jì)算的方法,已經(jīng)去掉了,獨(dú)立出去做成了算法類原來報(bào)價(jià)方法里面,對(duì)具體計(jì)算方式的判斷,去掉了,讓客戶端來完成選擇具體算法的功能新添加持有一個(gè)具體的算法實(shí)現(xiàn),通過構(gòu)造方法傳入原來報(bào)價(jià)方法的實(shí)現(xiàn),變化成了轉(zhuǎn)調(diào)具體算法來實(shí)現(xiàn)定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境接下來看看上下文的實(shí)現(xiàn),也就是原來的價(jià)格類,它的變化比較大,66定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境67寫個(gè)客戶端來測(cè)試運(yùn)行一下,示例代碼如下:定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境寫個(gè)客戶端來測(cè)試運(yùn)行一下,示例代碼如下:定義和角色結(jié)構(gòu)示意圖68目錄
Contents1234定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明5優(yōu)缺點(diǎn)和環(huán)境目錄Contents1234定義和角色結(jié)構(gòu)示意圖示69優(yōu)點(diǎn):1、策略模式提供了管理相關(guān)的算法族的辦法。恰當(dāng)使用繼承可以把公共的代碼轉(zhuǎn)移到父類里面,從而避免重復(fù)的代碼。2、策略模式提供了可以替換繼承關(guān)系的辦法。繼承可以處理多種算法或行為。3、使用策略模式可以避免使用多重條件轉(zhuǎn)移語句。如果采用多重轉(zhuǎn)移語句將不易維護(hù).定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境優(yōu)點(diǎn):定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境70缺點(diǎn):1、客戶端必須知道所有的策略類,并自行決定使用哪一個(gè)策略類。換言之,策略模式只適用于客戶端知道所有的算法或行為的情況。2、策略模式造成很多的策略類,每個(gè)具體策略類都會(huì)產(chǎn)生一個(gè)新類,使得策略類變得很復(fù)雜。定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境缺點(diǎn):定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境71應(yīng)用環(huán)境:
1、實(shí)現(xiàn)某特定功能在不同的情況下采用不同的策略即算法,程序在運(yùn)行時(shí)動(dòng)態(tài)選擇所要采用的策略。
2、對(duì)客戶端完全隱藏算法的具體實(shí)現(xiàn)細(xì)節(jié)。
3、不同種算法之間可以彼此替換且完全獨(dú)立。定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境應(yīng)用環(huán)境:定義和角色結(jié)構(gòu)示意圖示例代碼實(shí)例說明優(yōu)缺點(diǎn)和環(huán)境72設(shè)計(jì)模式之模板方法模式
主講人:孫晗
時(shí)間:2016.11.14設(shè)計(jì)模式之模板方法模式73目錄
Contents1234定義和角色結(jié)構(gòu)示意圖優(yōu)缺點(diǎn)和環(huán)境實(shí)例說明5區(qū)別與聯(lián)系目錄Contents1234定義和角色結(jié)構(gòu)示意圖優(yōu)74定義:一個(gè)抽象類中,有一個(gè)主方法,再定義1~n個(gè)方法,這些方法可以是抽象的,也可以是具體的;定義一個(gè)類,繼承該抽象類,重寫抽象方法,通過調(diào)用抽象類,實(shí)現(xiàn)對(duì)子類的調(diào)用。意圖:模板方法模式是在一個(gè)方法中定義一個(gè)算法的骨架,而將一些步驟延遲到子類中實(shí)現(xiàn)。模板方法使得子類可以在不改變算法結(jié)構(gòu)的情況下,重新定義算法中的某些步驟。定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境定義:一個(gè)抽象類中,有一個(gè)主方法,再定義1~n個(gè)方法,這些方75角色(兩種):抽象模板類:①定義了一個(gè)或多個(gè)抽象操作,以便讓子類實(shí)現(xiàn)。這些抽象操作叫做基本操作,它們是一個(gè)頂級(jí)邏輯的組成步驟②定義并實(shí)現(xiàn)了一個(gè)模板方法具體模板類:①現(xiàn)父類所定義的一個(gè)或多個(gè)抽象方法②每一個(gè)抽象模板類都可以有任意多個(gè)具體模板類與之對(duì)應(yīng),而每一個(gè)具體模板類都可以給出這些抽象方法的不同實(shí)現(xiàn),從而使得頂級(jí)邏輯的實(shí)現(xiàn)各不相同定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境角色(兩種):定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和76方法(兩種):模板方法:一個(gè)模板方法是定義在抽象類中的,把基本操作方法組合在一起形成一個(gè)總算法或一個(gè)總行為的方法。一個(gè)抽象類可以有任意多個(gè)模板方法,而不限于一個(gè)。每一個(gè)模板方法都可以調(diào)用任意多個(gè)具體方法?;痉椒ǎ撼橄蠓椒ǎ河沙橄箢惵暶?,由具體子類實(shí)現(xiàn),java語言中以abstract關(guān)鍵字標(biāo)出來。具體方法:由抽象類聲明并實(shí)現(xiàn),而子類并不實(shí)現(xiàn)或置換,java中沒有abstract關(guān)鍵字。鉤子方法:有抽象類聲明并實(shí)現(xiàn),而子類會(huì)加以擴(kuò)展。通常抽象類給出的實(shí)現(xiàn)是一個(gè)空實(shí)現(xiàn),作為方法的默認(rèn)實(shí)現(xiàn)。因此,此方法的存在,可以讓子類有能力對(duì)算法的不同點(diǎn)進(jìn)行掛鉤,要不要掛鉤,由子類自行決定。定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境方法(兩種):定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和77目錄
Contents1234定義和角色結(jié)構(gòu)示意圖優(yōu)缺點(diǎn)和環(huán)境實(shí)例說明5區(qū)別與聯(lián)系目錄Contents1234定義和角色結(jié)構(gòu)示意圖優(yōu)78定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境定義和角色結(jié)構(gòu)示意圖實(shí)例說明區(qū)別與聯(lián)系優(yōu)缺點(diǎn)和環(huán)境79目錄
Contents1234定義和角色結(jié)構(gòu)示意圖優(yōu)缺點(diǎn)和環(huán)境實(shí)例說明5區(qū)別與聯(lián)系目錄Contents1234定義和角色結(jié)構(gòu)示意圖優(yōu)80創(chuàng)建一個(gè)模板(抽象)類:Beverage(飲料)模板方法給出了邏輯的骨架,而邏輯的組成是一些相應(yīng)的抽象操作,他們推遲到子類中去實(shí)現(xiàn)定義和角色結(jié)構(gòu)示意圖實(shí)例說明
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中建自動(dòng)施工方案
- 《物理競(jìng)賽題解析與物理競(jìng)賽輔導(dǎo)教學(xué)方案》
- 汽車車門施工方案
- 內(nèi)墻保溫板施工方案
- 農(nóng)村拆除施工方案范本
- 揚(yáng)州脫硫煙囪施工方案
- 古詩二首(東溪和蠶麥)閱讀練習(xí)
- 建筑工程臨時(shí)用工合同
- 包頭中招試題數(shù)學(xué)試卷
- 污泥干化機(jī)更換施工方案
- GB/T 24475-2023電梯遠(yuǎn)程報(bào)警系統(tǒng)
- 衢州市建筑工程質(zhì)量通病防治措施
- 《中式面點(diǎn)技藝(第二版)》教案(高教版)
- 工廠車間環(huán)境監(jiān)測(cè)控制系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)
- 《神經(jīng)梅毒》教學(xué)課件
- 六年級(jí)下冊(cè)數(shù)學(xué)同步學(xué)堂
- 【電氣專業(yè)】15D501建筑物防雷設(shè)施安裝
- 通信施工安全生產(chǎn)培訓(xùn)(登高作業(yè)施工專題)
- 四位數(shù)乘四位數(shù)乘法題500道
- 企業(yè)生產(chǎn)管理-9S現(xiàn)場(chǎng)管理培訓(xùn)PPT課件教材講義
- 豬場(chǎng)趕豬方案
評(píng)論
0/150
提交評(píng)論