版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、LOGO設(shè)計(jì)模式設(shè)計(jì)模式(Design Pattern) 張凱 副教授計(jì)算機(jī)學(xué)院 軟件工程系:武漢科技大學(xué)問(wèn)題問(wèn)題(Problem)(Problem)v題目抄錯(cuò),會(huì)做也白搭:武漢科技大學(xué)問(wèn)題問(wèn)題(Problem)(Problem) class TestPaperA /試題1 public void TestQuestion1() Console.WriteLine( 楊過(guò)得到,后來(lái)給了郭靖,煉成倚天劍、屠龍刀的玄鐵 可能是 a.球磨鑄鐵 b.馬口鐵 c.高速合金鋼 d.碳素纖維 ); Console.WriteLine(答案:b); /試題2 public void TestQuestion2
2、() Console.WriteLine( 楊過(guò)、程英、陸無(wú)雙鏟除了情花,呵斥 a.使這種植物不再害人 b.使一種珍稀物種滅絕 c.破壞了那個(gè)生物圈的生態(tài)平衡 d.造成該地區(qū)沙漠化 ); Console.WriteLine(答案:a); /試題3 public void TestQuestion3() Console.WriteLine( 藍(lán)鳳凰的致使華山師徒、桃谷六仙嘔吐不止,如果你是大夫,會(huì)給他們 開(kāi)什么藥 a.阿司匹林 b.牛黃解毒片 c.氟哌酸 d.讓他們喝大量的生牛奶 e.以上全不對(duì) ); Console.WriteLine(答案:c); 學(xué)生甲的試卷:武漢科技大學(xué)問(wèn)題問(wèn)題(Prob
3、lem)(Problem) class TestPaperB /試題1 public void TestQuestion1() Console.WriteLine( 楊過(guò)得到,后來(lái)給了郭靖,煉成倚天劍、屠龍刀的玄鐵 可能是 a.球磨鑄鐵 b.馬口鐵 c.高速合金鋼 d.碳素纖維 ); Console.WriteLine(答案:d); /試題2 public void TestQuestion2() Console.WriteLine( 楊過(guò)、程英、陸無(wú)雙鏟除了情花,呵斥 a.使這種植物不再害人 b.使一種珍稀物種滅絕 c.破壞了那個(gè)生物圈的生態(tài)平衡 d.造成該地區(qū)沙漠化 ); Console.
4、WriteLine(答案:b); /試題3 public void TestQuestion3() Console.WriteLine( 藍(lán)鳳凰的致使華山師徒、桃谷六仙嘔吐不止,如果你是大夫,會(huì)給他們 開(kāi)什么藥 a.阿司匹林 b.牛黃解毒片 c.氟哌酸 d.讓他們喝大量的生牛奶 e.以上全不對(duì) ); Console.WriteLine(答案:a); 學(xué)生乙的試卷:武漢科技大學(xué)問(wèn)題問(wèn)題(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é)生乙的試卷類非常類似,除了答案不同,沒(méi)什么區(qū)別,如果老除了
6、答案不同,沒(méi)什么區(qū)別,如果老師修改題目,師修改題目,2個(gè)類都需要修改。個(gè)類都需要修改。:武漢科技大學(xué)問(wèn)題問(wèn)題(Problem)(Problem) class TestPaper /試題1 public void TestQuestion1() Console.WriteLine( 楊過(guò)得到,后來(lái)給了郭靖,煉成倚天劍、屠龍刀的玄鐵 可能是 a.球磨鑄鐵 b.馬口鐵 c.高速合金鋼 d.碳素纖維 ); Console.WriteLine(答案:b); /試題2 public void TestQuestion2() Console.WriteLine( 楊過(guò)、程英、陸無(wú)雙鏟除了情花,呵斥 a.使這
7、種植物不再害人 b.使一種珍稀物種滅絕 c.破壞了那個(gè)生物圈的生態(tài)平衡 d.造成該地區(qū)沙漠化 ); Console.WriteLine(答案:a); /試題3 public void TestQuestion3() Console.WriteLine( 藍(lán)鳳凰的致使華山師徒、桃谷六仙嘔吐不止,如果你是大夫,會(huì)給他們 開(kāi)什么藥 a.阿司匹林 b.牛黃解毒片 c.氟哌酸 d.讓他們喝大量的生牛奶 e.以上全不對(duì) ); Console.WriteLine(答案:c); 試卷父類試卷父類:武漢科技大學(xué)問(wèn)題問(wèn)題(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é)問(wèn)題問(wèn)題(Problem)(Problem) class TestPaper public void TestQuestion1() Console.Wr
10、iteLine( 楊過(guò)得到,后來(lái)給了郭靖,煉成倚天劍、屠龍 刀的玄鐵可能是 a.球磨鑄鐵 b.馬口鐵 c.高速合金鋼 d.碳素纖維 ); Console.WriteLine(答案: + Answer1(); protected virtual string Answer1() return ; :武漢科技大學(xué)問(wèn)題問(wèn)題(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é)問(wèn)題問(wèn)題(Problem)(Problem):武漢科技大學(xué)問(wèn)題問(wèn)題(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)容模式動(dòng)機(jī)與定義1模式結(jié)構(gòu)與分析2模式實(shí)例與解析3模式效果與應(yīng)用4:武漢科技大學(xué)模板方法模式模板方法模式(Template Method)(Template Method)v模式動(dòng)機(jī)v模式名稱:模板方法模式(Template Method)v準(zhǔn)備一個(gè)抽象類,將部分邏輯以具體方法以及具體構(gòu)造函數(shù)的形式實(shí)現(xiàn),然后聲明一些抽象方法來(lái)迫使子類實(shí)現(xiàn)剩余的邏輯。不同的子類可以以不同的方式實(shí)現(xiàn)這些抽象方法,從而對(duì)剩余的邏輯有不同的實(shí)現(xiàn)。這就是模版方法模式的用意。:武漢科技大學(xué)模板方法模式模板方法模式(Template Meth
14、od)(Template Method)v模式動(dòng)機(jī)v很多人可能沒(méi)有想到,模版方法模式實(shí)際上是所有模式中最為常見(jiàn)的幾個(gè)模式之一,而且很多人可能使用過(guò)模版方法模式而沒(méi)有意識(shí)到自己已經(jīng)使用了這個(gè)模式。模版方法模式是基于繼承的代碼復(fù)用的基本技術(shù),模版方法模式的結(jié)構(gòu)和用法也是面向?qū)ο笤O(shè)計(jì)的核心。 :武漢科技大學(xué)模板方法模式模板方法模式(Template Method)(Template Method)v模式動(dòng)機(jī)v模版方法模式需要開(kāi)發(fā)抽象類和具體子類的設(shè)計(jì)師之間的協(xié)作。一個(gè)設(shè)計(jì)師負(fù) 責(zé)給出一個(gè)算法的輪廓和骨架,另一些設(shè)計(jì)師則負(fù)責(zé)給出這個(gè)算法的各個(gè)邏輯步驟。代表這些具體邏輯步驟的方法稱做基本方法primit
15、ive method);而將這些基本法方法總匯起來(lái)的方法叫做模版方法template method),這個(gè)設(shè)計(jì)模式的名字就是從此而來(lái)。:武漢科技大學(xué)模板方法模式模板方法模式(Template Method)(Template Method)v模式定義 v模板方法(Template Method):定義一個(gè)操作中算法的骨架,而將一些 步驟延遲到子類中。模板方法使得子類可以不改變一個(gè)算法的結(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例子 極品飛車中有很多的汽車,但是從操作角度看大同小異。無(wú)非是起步StartUp)、行駛Run)、停車Stop等行為。結(jié)合Template Method模式講就是在這個(gè)程序中,構(gòu)造對(duì)汽車的操作是穩(wěn)定的,但是變化在于各個(gè)子步驟操作行為的具體實(shí)現(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原語(yǔ)操作),它們是在子類中的擴(kuò)原語(yǔ)操作),它們是在子類中的擴(kuò)展點(diǎn)。展點(diǎn)。AbstractCar中的中的DriveOnTheRoad方法叫做方法叫做template method模板方法),模板方法),template method用用primitive operation定義一個(gè)算法,是相對(duì)穩(wěn)定的部分。(子類中重新定義一個(gè)算法,是相對(duì)穩(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)缺點(diǎn)如下v模板方法模式在一個(gè)類中形式化地定義算法,而由它的子類實(shí)現(xiàn)細(xì)節(jié)的處理。 模板方法模式的優(yōu)勢(shì)是,在子類定義詳細(xì)的處理算法時(shí)不會(huì)改變算法的結(jié)構(gòu)。 v模板方法是一種代碼復(fù)用的基本技術(shù),它們?cè)陬悗?kù)中尤為重要,它們提取了類庫(kù)中的公共行為。 v模板方法導(dǎo)致一種反向的控制結(jié)構(gòu),一個(gè)父類調(diào)用一個(gè)子類的操作,而不是相反。 :武漢科技大學(xué)模板方法模式模板方法模式(Template Method)(Template Method)v模板方法模式的優(yōu)缺點(diǎn)如下v模板方法的缺點(diǎn)在于每個(gè)不同的實(shí)現(xiàn)都需要定義一個(gè)子類,這會(huì)導(dǎo)致類的個(gè)數(shù)增加,但是更加符合類職責(zé)的分配原則,使得類的內(nèi)聚性得以提高。:武漢科技大學(xué)模板方法模式模板方法模式(Template Method)(Template Method)v模式使用v在以下情況下可以使用模板方法模式:v一次性實(shí)現(xiàn)一個(gè)算法的
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度建筑幕墻工程金屬幕墻清洗勞務(wù)分包合同樣本4篇
- 2025版智慧城市建設(shè)履約擔(dān)保合同模板4篇
- 2025年度二零二五年度木質(zhì)包裝材料銷售合同范本4篇
- 2025年度個(gè)人意外傷害保險(xiǎn)借款合同范本3篇
- 2025版小程序功能開(kāi)發(fā)授權(quán)合同模板3篇
- 2025年分期付款數(shù)碼產(chǎn)品購(gòu)買合同
- 2025年機(jī)械設(shè)備加工合同
- 2025版外貿(mào)出口農(nóng)產(chǎn)品質(zhì)量安全合同3篇
- 2025年度環(huán)保認(rèn)證木制品采購(gòu)合同范本4篇
- 二零二五年度知識(shí)產(chǎn)權(quán)留置擔(dān)保協(xié)議書4篇
- 中國(guó)末端執(zhí)行器(靈巧手)行業(yè)市場(chǎng)發(fā)展態(tài)勢(shì)及前景戰(zhàn)略研判報(bào)告
- 北京離婚協(xié)議書(2篇)(2篇)
- 2025中國(guó)聯(lián)通北京市分公司春季校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- Samsung三星SMARTCAMERANX2000(20-50mm)中文說(shuō)明書200
- 2024年藥品質(zhì)量信息管理制度(2篇)
- 2024年安徽省高考地理試卷真題(含答案逐題解析)
- 廣東省廣州市2024年中考數(shù)學(xué)真題試卷(含答案)
- 內(nèi)審檢查表完整版本
- 3級(jí)人工智能訓(xùn)練師(高級(jí))國(guó)家職業(yè)技能鑒定考試題及答案
- 孤殘兒童護(hù)理員技能鑒定考試題庫(kù)(含答案)
- 瑤浴話術(shù)資料
評(píng)論
0/150
提交評(píng)論