国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

詳解C#設(shè)計模式編程中的模板方法模式使用

2020-01-24 01:15:44
字體:
供稿:網(wǎng)友

一、引言
提到模板,大家肯定不免想到生活中的“簡歷模板”、“論文模板”、“Word中模版文件”等,在現(xiàn)實(shí)生活中,模板的概念就是――有一個規(guī)定的格式,然后每個人都可以根據(jù)自己的需求或情況去更新它,例如簡歷模板,下載下來的簡歷模板的格式都是相同的,然而我們下載下來簡歷模板之后我們可以根據(jù)自己的情況填充不同的內(nèi)容要完成屬于自己的簡歷。在設(shè)計模式中,模板方法模式中模板和生活中模板概念非常類似,下面讓我們就詳細(xì)介紹模板方法的定義,大家可以根據(jù)生活中模板的概念來理解模板方法的定義。

二、模板方法模式詳細(xì)介紹
2.1 模板方法模式的定義
模板方法模式――在一個抽象類中定義一個操作中的算法骨架(對應(yīng)于生活中的大家下載的模板),而將一些步驟延遲到子類中去實(shí)現(xiàn)(對應(yīng)于我們根據(jù)自己的情況向模板填充內(nèi)容)。模板方法使得子類可以不改變一個算法的結(jié)構(gòu)前提下,重新定義算法的某些特定步驟,模板方法模式把不變行為搬到超類中,從而去除了子類中的重復(fù)代碼。

2.2 模板方法模式的實(shí)現(xiàn)
在這里以實(shí)現(xiàn)一個公司的薪資系統(tǒng)為例介紹一下模板方法的應(yīng)用。
首先定義抽象類,一般建議將抽象的操作定義為非虛public方法,將子類需要定義的特定步驟定義為抽象的protected方法。

publicabstractclass Employee {publicvoid GetSalary()  {   GetBasicSalary();   AddBonus();  }protectedabstractvoid GetBasicSalary();protectedabstractvoid AddBonus(); }

接著分別實(shí)現(xiàn)經(jīng)理和CEO的薪資

publicclass Manager : Employee {protectedoverridevoid GetBasicSalary()  {   Console.WriteLine("Get Manager Basic Salary");  }protectedoverridevoid AddBonus()  {   Console.WriteLine("Add Manager Bonus");  } }publicclass CEO : Employee {protectedoverridevoid GetBasicSalary()  {   Console.WriteLine("Get CEO Basic Salary");  }protectedoverridevoid AddBonus()  {   Console.WriteLine("Add CEO Bonus");  } }

2.3 模板方法模式的結(jié)構(gòu)圖
模板方法是一種常見的設(shè)計模式,它定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。
模板方法的結(jié)構(gòu)圖如下

201622494757547.jpg (457×258)

模板方法模式中涉及了兩個角色:

(1)抽象模板角色(Vegetable扮演這個角色):定義了一個或多個抽象操作,以便讓子類實(shí)現(xiàn),這些抽象操作稱為基本操作。
(2)具體模板角色(ChineseCabbage和Spinach扮演這個角色):實(shí)現(xiàn)父類所定義的一個或多個抽象方法。
三、模板方法模式的優(yōu)缺點(diǎn)
下面讓我們繼續(xù)分析下模板方法的優(yōu)缺點(diǎn)。

1.優(yōu)點(diǎn):實(shí)現(xiàn)了代碼復(fù)用,能夠靈活應(yīng)對子步驟的變化,符合開放-封閉原則。
2.缺點(diǎn):因?yàn)橐肓艘粋€抽象類,如果具體實(shí)現(xiàn)過多的話,需要用戶或開發(fā)人員需要花更多的時間去理清類之間的關(guān)系。

附:在.NET中模板方法的應(yīng)用也很多,例如我們在開發(fā)自定義的Web控件或WinForm控件時,我們只需要重寫某個控件的部分方法。

四、總結(jié)
到這里,模板方法的介紹就結(jié)束了,模板方法模式在抽象類中定義了算法的實(shí)現(xiàn)步驟,將這些步驟的實(shí)現(xiàn)延遲到具體子類中去實(shí)現(xiàn),從而使所有子類復(fù)用了父類的代碼,所以模板方法模式是基于繼承的一種實(shí)現(xiàn)代碼復(fù)用的技術(shù)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 大关县| 荃湾区| 石河子市| 甘泉县| 太湖县| 浦县| 广昌县| 屏边| 达日县| 丰顺县| 尚志市| 马尔康县| 辽中县| 福海县| 泰兴市| 高台县| 青川县| 大厂| 东乡| 巴南区| 佛坪县| 商丘市| 正阳县| 颍上县| 密山市| 天全县| 阳谷县| 大名县| 龙州县| 丹凤县| 原阳县| 曲阳县| 昭平县| 宣威市| 文水县| 贵溪市| 佳木斯市| 肇东市| 开阳县| 望奎县| 达州市|