23.設(shè)計模式.模板方法模式ppt課件_第1頁
23.設(shè)計模式.模板方法模式ppt課件_第2頁
23.設(shè)計模式.模板方法模式ppt課件_第3頁
23.設(shè)計模式.模板方法模式ppt課件_第4頁
23.設(shè)計模式.模板方法模式ppt課件_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、LOGO設(shè)計模式設(shè)計模式(Design Pattern) 張凱 副教授計算機學(xué)院 軟件工程系:武漢科技大學(xué)問題問題(Problem)(Problem)v題目抄錯,會做也白搭:武漢科技大學(xué)問題問題(Problem)(Problem) class TestPaperA /試題1 public void TestQuestion1() Console.WriteLine( 楊過得到,后來給了郭靖,煉成倚天劍、屠龍刀的玄鐵 可能是 a.球磨鑄鐵 b.馬口鐵 c.高速合金鋼 d.碳素纖維 ); Console.WriteLine(答案:b); /試題2 public void TestQuestion2

2、() Console.WriteLine( 楊過、程英、陸無雙鏟除了情花,呵斥 a.使這種植物不再害人 b.使一種珍稀物種滅絕 c.破壞了那個生物圈的生態(tài)平衡 d.造成該地區(qū)沙漠化 ); Console.WriteLine(答案:a); /試題3 public void TestQuestion3() Console.WriteLine( 藍鳳凰的致使華山師徒、桃谷六仙嘔吐不止,如果你是大夫,會給他們 開什么藥 a.阿司匹林 b.牛黃解毒片 c.氟哌酸 d.讓他們喝大量的生牛奶 e.以上全不對 ); Console.WriteLine(答案:c); 學(xué)生甲的試卷:武漢科技大學(xué)問題問題(Prob

3、lem)(Problem) class TestPaperB /試題1 public void TestQuestion1() Console.WriteLine( 楊過得到,后來給了郭靖,煉成倚天劍、屠龍刀的玄鐵 可能是 a.球磨鑄鐵 b.馬口鐵 c.高速合金鋼 d.碳素纖維 ); Console.WriteLine(答案:d); /試題2 public void TestQuestion2() Console.WriteLine( 楊過、程英、陸無雙鏟除了情花,呵斥 a.使這種植物不再害人 b.使一種珍稀物種滅絕 c.破壞了那個生物圈的生態(tài)平衡 d.造成該地區(qū)沙漠化 ); Console.

4、WriteLine(答案:b); /試題3 public void TestQuestion3() Console.WriteLine( 藍鳳凰的致使華山師徒、桃谷六仙嘔吐不止,如果你是大夫,會給他們 開什么藥 a.阿司匹林 b.牛黃解毒片 c.氟哌酸 d.讓他們喝大量的生牛奶 e.以上全不對 ); Console.WriteLine(答案:a); 學(xué)生乙的試卷:武漢科技大學(xué)問題問題(Problem)(Problem) static void Main(string args) Console.WriteLine(學(xué)生甲的試卷:); TestPaperA studentA = new Test

5、PaperA(); studentA.TestQuestion1(); studentA.TestQuestion2(); studentA.TestQuestion3(); Console.WriteLine(學(xué)生乙的試卷:); TestPaperB studentB = new TestPaperB(); studentB.TestQuestion1(); studentB.TestQuestion2(); studentB.TestQuestion3(); Console.Read(); 學(xué)生甲和學(xué)生乙的試卷類非常類似,學(xué)生甲和學(xué)生乙的試卷類非常類似,除了答案不同,沒什么區(qū)別,如果老除了

6、答案不同,沒什么區(qū)別,如果老師修改題目,師修改題目,2個類都需要修改。個類都需要修改。:武漢科技大學(xué)問題問題(Problem)(Problem) class TestPaper /試題1 public void TestQuestion1() Console.WriteLine( 楊過得到,后來給了郭靖,煉成倚天劍、屠龍刀的玄鐵 可能是 a.球磨鑄鐵 b.馬口鐵 c.高速合金鋼 d.碳素纖維 ); Console.WriteLine(答案:b); /試題2 public void TestQuestion2() Console.WriteLine( 楊過、程英、陸無雙鏟除了情花,呵斥 a.使這

7、種植物不再害人 b.使一種珍稀物種滅絕 c.破壞了那個生物圈的生態(tài)平衡 d.造成該地區(qū)沙漠化 ); Console.WriteLine(答案:a); /試題3 public void TestQuestion3() Console.WriteLine( 藍鳳凰的致使華山師徒、桃谷六仙嘔吐不止,如果你是大夫,會給他們 開什么藥 a.阿司匹林 b.牛黃解毒片 c.氟哌酸 d.讓他們喝大量的生牛奶 e.以上全不對 ); Console.WriteLine(答案:c); 試卷父類試卷父類:武漢科技大學(xué)問題問題(Problem)(Problem)學(xué)生甲的試卷 class TestPaperA : Tes

8、tPaper public new void TestQuestion1() base.TestQuestion1(); Console.WriteLine(答案:c); public new void TestQuestion2() base.TestQuestion2(); Console.WriteLine(答案:b); public new void TestQuestion3() base.TestQuestion3(); Console.WriteLine(答案:a); class TestPaperB : TestPaper public new void TestQuestio

9、n1() base.TestQuestion1(); Console.WriteLine(答案:d); public new void TestQuestion2() base.TestQuestion2(); Console.WriteLine(答案:c); public new void TestQuestion3() base.TestQuestion3(); Console.WriteLine(答案:a); 學(xué)生乙的試卷:武漢科技大學(xué)問題問題(Problem)(Problem) class TestPaper public void TestQuestion1() Console.Wr

10、iteLine( 楊過得到,后來給了郭靖,煉成倚天劍、屠龍 刀的玄鐵可能是 a.球磨鑄鐵 b.馬口鐵 c.高速合金鋼 d.碳素纖維 ); Console.WriteLine(答案: + Answer1(); protected virtual string Answer1() return ; :武漢科技大學(xué)問題問題(Problem)(Problem) /學(xué)生甲抄的試卷 class TestPaperA : TestPaper protected override string Answer1() return b; protected override string Answer2() re

11、turn c; protected override string Answer3() return a; /學(xué)生乙抄的試卷 class TestPaperB : TestPaper protected override string Answer1() return c; protected override string Answer2() return a; protected override string Answer3() return a; :武漢科技大學(xué)問題問題(Problem)(Problem):武漢科技大學(xué)問題問題(Problem)(Problem) static void

12、 Main(string args) Console.WriteLine(學(xué)生甲抄的試卷:); TestPaper studentA = new TestPaperA(); studentA.TestQuestion1(); studentA.TestQuestion2(); studentA.TestQuestion3(); Console.WriteLine(學(xué)生乙抄的試卷:); TestPaper studentB = new TestPaperB(); studentB.TestQuestion1(); studentB.TestQuestion2(); studentB.TestQu

13、estion3(); Console.Read(); :武漢科技大學(xué)主要內(nèi)容主要內(nèi)容模式動機與定義1模式結(jié)構(gòu)與分析2模式實例與解析3模式效果與應(yīng)用4:武漢科技大學(xué)模板方法模式模板方法模式(Template Method)(Template Method)v模式動機v模式名稱:模板方法模式(Template Method)v準備一個抽象類,將部分邏輯以具體方法以及具體構(gòu)造函數(shù)的形式實現(xiàn),然后聲明一些抽象方法來迫使子類實現(xiàn)剩余的邏輯。不同的子類可以以不同的方式實現(xiàn)這些抽象方法,從而對剩余的邏輯有不同的實現(xiàn)。這就是模版方法模式的用意。:武漢科技大學(xué)模板方法模式模板方法模式(Template Meth

14、od)(Template Method)v模式動機v很多人可能沒有想到,模版方法模式實際上是所有模式中最為常見的幾個模式之一,而且很多人可能使用過模版方法模式而沒有意識到自己已經(jīng)使用了這個模式。模版方法模式是基于繼承的代碼復(fù)用的基本技術(shù),模版方法模式的結(jié)構(gòu)和用法也是面向?qū)ο笤O(shè)計的核心。 :武漢科技大學(xué)模板方法模式模板方法模式(Template Method)(Template Method)v模式動機v模版方法模式需要開發(fā)抽象類和具體子類的設(shè)計師之間的協(xié)作。一個設(shè)計師負 責(zé)給出一個算法的輪廓和骨架,另一些設(shè)計師則負責(zé)給出這個算法的各個邏輯步驟。代表這些具體邏輯步驟的方法稱做基本方法primit

15、ive method);而將這些基本法方法總匯起來的方法叫做模版方法template method),這個設(shè)計模式的名字就是從此而來。:武漢科技大學(xué)模板方法模式模板方法模式(Template Method)(Template Method)v模式定義 v模板方法(Template Method):定義一個操作中算法的骨架,而將一些 步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。模板方法是一種類行為型模式。:武漢科技大學(xué)模板方法模式模板方法模式(Template Method)(Template Method)v模式結(jié)構(gòu) :武漢科技大學(xué)模板方法模式模板

16、方法模式(Template Method)(Template Method)v參與者 vAbstractClass:抽象類 vConcreteClass:具體子類 :武漢科技大學(xué)模板方法模式模板方法模式(Template Method)(Template Method)v例子 極品飛車中有很多的汽車,但是從操作角度看大同小異。無非是起步StartUp)、行駛Run)、停車Stop等行為。結(jié)合Template Method模式講就是在這個程序中,構(gòu)造對汽車的操作是穩(wěn)定的,但是變化在于各個子步驟操作行為的具體實現(xiàn))。:武漢科技大學(xué)模板方法模式模板方法模式(Template Method)(Temp

17、late Method) public abstract class AbstractCar protected abstract string StartUp(); protected abstract string Run(); protected abstract string Stop(); public void DriveOnTheRoad() Console.WriteLine(StartUp(); Console.WriteLine(Run(); Console.WriteLine(Stop(); 在這段代碼中,抽象方法在這段代碼中,抽象方法StartUp、Run、Stop叫做

18、叫做primitive operation原語操作),它們是在子類中的擴原語操作),它們是在子類中的擴展點。展點。AbstractCar中的中的DriveOnTheRoad方法叫做方法叫做template method模板方法),模板方法),template method用用primitive operation定義一個算法,是相對穩(wěn)定的部分。(子類中重新定義一個算法,是相對穩(wěn)定的部分。(子類中重新定義定義primitive operation)。)。:武漢科技大學(xué)模板方法模式模板方法模式(Template Method)(Template Method) public class BORA

19、: AbstractCar protected override string StartUp() return BORA is StartUp; protected override string Run() return BORA is Running; protected override string Stop() return BORA is Stoped; :武漢科技大學(xué)模板方法模式模板方法模式(Template Method)(Template Method)static void Main(string args) AbstractCar car = new BORA(); c

20、ar.DriveOnTheRoad(); Console.Read();:武漢科技大學(xué)模板方法模式模板方法模式(Template Method)(Template Method)v模板方法模式的優(yōu)缺點如下v模板方法模式在一個類中形式化地定義算法,而由它的子類實現(xiàn)細節(jié)的處理。 模板方法模式的優(yōu)勢是,在子類定義詳細的處理算法時不會改變算法的結(jié)構(gòu)。 v模板方法是一種代碼復(fù)用的基本技術(shù),它們在類庫中尤為重要,它們提取了類庫中的公共行為。 v模板方法導(dǎo)致一種反向的控制結(jié)構(gòu),一個父類調(diào)用一個子類的操作,而不是相反。 :武漢科技大學(xué)模板方法模式模板方法模式(Template Method)(Template Method)v模板方法模式的優(yōu)缺點如下v模板方法的缺點在于每個不同的實現(xiàn)都需要定義一個子類,這會導(dǎo)致類的個數(shù)增加,但是更加符合類職責(zé)的分配原則,使得類的內(nèi)聚性得以提高。:武漢科技大學(xué)模板方法模式模板方法模式(Template Method)(Template Method)v模式使用v在以下情況下可以使用模板方法模式:v一次性實現(xiàn)一個算法的

溫馨提示

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

最新文檔

評論

0/150

提交評論