程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 詳解C#設計模式編程中的模板方法模式使用

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

編輯:關於C語言

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

二、模板方法模式詳細介紹
2.1 模板方法模式的定義
模板方法模式——在一個抽象類中定義一個操作中的算法骨架(對應於生活中的大家下載的模板),而將一些步驟延遲到子類中去實現(對應於我們根據自己的情況向模板填充內容)。模板方法使得子類可以不改變一個算法的結構前提下,重新定義算法的某些特定步驟,模板方法模式把不變行為搬到超類中,從而去除了子類中的重復代碼。

2.2 模板方法模式的實現
在這裡以實現一個公司的薪資系統為例介紹一下模板方法的應用。
首先定義抽象類,一般建議將抽象的操作定義為非虛public方法,將子類需要定義的特定步驟定義為抽象的protected方法。

? 1 2 3 4 5 6 7 8 9 10 11 publicabstractclass Employee { publicvoid GetSalary() { GetBasicSalary(); AddBonus(); } protectedabstractvoid GetBasicSalary(); protectedabstractvoid AddBonus(); }

接著分別實現經理和CEO的薪資

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 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 模板方法模式的結構圖
模板方法是一種常見的設計模式,它定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
模板方法的結構圖如下

201622494757547.jpg (457×258)

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

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

1.優點:實現了代碼復用,能夠靈活應對子步驟的變化,符合開放-封閉原則。
2.缺點:因為引入了一個抽象類,如果具體實現過多的話,需要用戶或開發人員需要花更多的時間去理清類之間的關系。

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

四、總結
到這裡,模板方法的介紹就結束了,模板方法模式在抽象類中定義了算法的實現步驟,將這些步驟的實現延遲到具體子類中去實現,從而使所有子類復用了父類的代碼,所以模板方法模式是基於繼承的一種實現代碼復用的技術。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved