欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2016年02月24日 09:50:08   作者:learninghard  
這篇文章主要介紹了C#設(shè)計(jì)模式編程中的模板方法模式,模板方法模式比較好理解,即設(shè)定好算法骨架以后進(jìn)行代碼的反復(fù)利用,需要的朋友可以參考下

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

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

2.2 模板方法模式的實(shí)現(xiàn)
在這里以實(shí)現(xiàn)一個(gè)公司的薪資系統(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è)計(jì)模式,它定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類中。模板使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。
模板方法的結(jié)構(gòu)圖如下

201622494757547.jpg (457×258)

模板方法模式中涉及了兩個(gè)角色:

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

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

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

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

相關(guān)文章

  • C# 字符串多行顯示/文本換行以textbox為例講解

    C# 字符串多行顯示/文本換行以textbox為例講解

    C# 字符串多行顯示、文本換行以textbox為例講為大家詳細(xì)介紹并附演示效果圖及演示代碼,感興趣的朋友可以了解下,或許對(duì)你學(xué)習(xí)字符串換行有所幫助
    2013-02-02
  • c#獲取季度時(shí)間實(shí)例代碼(季度的第一天)

    c#獲取季度時(shí)間實(shí)例代碼(季度的第一天)

    這篇文章主要介紹了c#獲取季度時(shí)間:季度的第一天、季度的最后一天等功能,大家參考使用吧
    2013-12-12
  • c# mutex互斥量的深入解析

    c# mutex互斥量的深入解析

    本篇文章主要是對(duì)c#中的mutex互斥量進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-01-01
  • c#字符串使用正則表達(dá)式示例

    c#字符串使用正則表達(dá)式示例

    這篇文章主要介紹了c#字符串使用正則表達(dá)式示例,需要的朋友可以參考下
    2014-02-02
  • C#實(shí)例化和靜態(tài)類對(duì)象調(diào)用對(duì)比

    C#實(shí)例化和靜態(tài)類對(duì)象調(diào)用對(duì)比

    這篇文章主要介紹了C#實(shí)例化和靜態(tài)類對(duì)象調(diào)用對(duì)比,什么時(shí)候用實(shí)例化對(duì)象,什么時(shí)候用靜態(tài)類對(duì)象,內(nèi)存和生命周期又是如何,框架本身的回收機(jī)制是什么,下文詳細(xì)解說需要的小伙伴可以參考一下
    2022-04-04
  • C# PropertyInfo類案例詳解

    C# PropertyInfo類案例詳解

    這篇文章主要介紹了C# PropertyInfo類案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C#實(shí)現(xiàn)騎士飛行棋

    C#實(shí)現(xiàn)騎士飛行棋

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)騎士飛行棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C#開啟線程的四種方式示例詳解

    C#開啟線程的四種方式示例詳解

    今天小編就為大家分享一篇關(guān)于C#開啟線程的四種方式示例詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • C# Winform窗口之間傳值的多種方法淺析

    C# Winform窗口之間傳值的多種方法淺析

    這篇文章主要介紹了C# Winform窗口之間傳值的多種方法淺析,本文起講解了通過構(gòu)造器傳值、通過屬性傳遞、通過事件攜帶參數(shù)傳遞等方法,需要的朋友可以參考下
    2015-04-04
  • C# Winform中實(shí)現(xiàn)主窗口打開登錄窗口關(guān)閉的方法

    C# Winform中實(shí)現(xiàn)主窗口打開登錄窗口關(guān)閉的方法

    這篇文章主要介紹了C# Winform中實(shí)現(xiàn)主窗口打開登錄窗口關(guān)閉的方法,這在需要用戶名密碼的軟件項(xiàng)目中是必用的一個(gè)技巧,要的朋友可以參考下
    2014-08-08

最新評(píng)論