最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#裝飾器模式(Decorator Pattern)實(shí)例教程

 更新時(shí)間:2014年09月12日 15:47:21   投稿:shichen2014  
這篇文章主要介紹了C#裝飾器模式(Decorator Pattern),以一個(gè)完整實(shí)例形式講述了C#裝飾器模式的實(shí)現(xiàn)過程,有助于深入理解C#程序設(shè)計(jì)思想,需要的朋友可以參考下

本文以實(shí)例形式詳細(xì)講述了C#裝飾器模式的實(shí)現(xiàn)方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:

現(xiàn)假設(shè)有一個(gè)公司要做產(chǎn)品套餐,即把不同的產(chǎn)品組合在一起,不同的組合對(duì)應(yīng)不同的價(jià)格。最終呈現(xiàn)出來的效果是:把產(chǎn)品組合的所有元素呈現(xiàn)出來,并顯示該組合的價(jià)格。

每個(gè)產(chǎn)品都有名稱和價(jià)格,首先設(shè)計(jì)一個(gè)關(guān)于產(chǎn)品的抽象基類。

public abstract class ProductBase
{
    public abstract string GetName();
    public abstract double GetPrice();
}

所有的產(chǎn)品都必須繼承這個(gè)基類,比如家居用品、電器產(chǎn)品等,把這些具體的產(chǎn)品提煉成一個(gè)繼承ProductBase的子類。

public class ConcretProuct : ProductBase
{
    private string _name;
    private double _price;
    public ConcretProuct(string name, double price)
    {
      this._name = name;
      this._price = price;
    }
    public override string GetName()
    {
      return _name;
    }
    public override double GetPrice()
    {
      return _price;
    }
}

然后考慮產(chǎn)品組合。比如賣平底鍋,可能送醬油,也有可能送醬油+老壇酸菜,可能的組合包括:

1. 平底鍋
2. 平底鍋 + 醬油
3. 平底鍋 + 醬油 + 老壇酸菜  

在這里,可以把醬油,老壇酸菜看作是裝飾器,因?yàn)槊考右粋€(gè)產(chǎn)品,都是在原有的基礎(chǔ)上增加的。比如做"平底鍋 + 醬油"這個(gè)組合,是在"平底鍋"的基礎(chǔ)上增加了"醬油"。

現(xiàn)在把醬油、老壇酸菜也設(shè)計(jì)成繼承ProductBase的子類,也就是裝飾器類。不過,與ConcretProuct類不同的是,裝飾器類需要引用ProductBase,在這里,無(wú)論是顯示產(chǎn)品組合還是計(jì)算產(chǎn)品產(chǎn)品組合價(jià)格,都離不開這個(gè)引用的ProductBase。

public class Decorator : ProductBase
{
    private ProductBase _product = null;
    private string _name;
    private double _price;
    public Decorator(ProductBase product, string name, double price)
    {
      this._product = product;
      this._name = name;
      this._price = price;
    }
    public override string GetName()
    {
      return string.Format("{0},{1}", _product.GetName(), _name);
    }
    public override double GetPrice()
    {
      return _product.GetPrice() + _price;
    }
}

以上,顯示產(chǎn)品名稱的時(shí)候,把裝飾器類Decorator引用的ProductBase的名稱和當(dāng)前名稱組合起來,以逗號(hào)分隔;顯示產(chǎn)品價(jià)格的時(shí)候,把引用的ProductBase的價(jià)格和當(dāng)前價(jià)格相加。

客戶端如下:

class Program
{
    static void Main(string[] args)
    {
      ConcretProuct livingProduct = new ConcretProuct("平底鍋",100);
      Console.WriteLine(PrintProductDetails(livingProduct));
      Decorator dec1 = new Decorator(livingProduct,"海鮮醬油",10);
      Console.WriteLine(PrintProductDetails(dec1));
      Decorator dec2 = new Decorator(dec1, "老壇酸菜",12);
      Console.WriteLine(PrintProductDetails(dec2));
      Console.ReadKey();
    }
    private static string PrintProductDetails(ProductBase product)
    {
      return string.Format("產(chǎn)品組合:{0}   價(jià)格:{1}", product.GetName(), product.GetPrice());
    }
}

運(yùn)行結(jié)果如下圖所示:

希望本文所述對(duì)大家C#程序設(shè)計(jì)的學(xué)習(xí)有所幫助。

相關(guān)文章

  • C#的SQL操作類實(shí)例

    C#的SQL操作類實(shí)例

    這篇文章主要介紹了C#的SQL操作類實(shí)例,涉及到針對(duì)數(shù)據(jù)庫(kù)的常用操作,在進(jìn)行C#數(shù)據(jù)庫(kù)程序設(shè)計(jì)中非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C# 使用Winform 獲取下拉框 選中的值

    C# 使用Winform 獲取下拉框 選中的值

    這篇文章主要介紹了C# 使用Winform 獲取下拉框 選中的值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • XAML如何獲取元素的位置

    XAML如何獲取元素的位置

    這篇文章主要為大家詳細(xì)介紹了XAML如何獲取元素的位置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • CDMA 貓用AT命令發(fā)中文短信(C#)

    CDMA 貓用AT命令發(fā)中文短信(C#)

    CDMA貓連PDU都不支持,只能發(fā)文本短信。而且發(fā)中文短信居然是UNICODE,無(wú)法在超級(jí)終端里輸入。只能寫程序。網(wǎng)上這個(gè)問題談?wù)摰乇容^多,做起來比較累,還偶爾會(huì)出亂碼。還是將C#的成功代碼帖一下吧。
    2009-08-08
  • C# DateTime.Compare()方法案例詳解

    C# DateTime.Compare()方法案例詳解

    這篇文章主要介紹了C# DateTime.Compare()方法案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • WinForm生成驗(yàn)證碼圖片的方法

    WinForm生成驗(yàn)證碼圖片的方法

    這篇文章主要介紹了WinForm生成驗(yàn)證碼圖片的方法,涉及WinForm字符串及圖形操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • WinForm導(dǎo)出文件為Word、Excel、文本文件的方法

    WinForm導(dǎo)出文件為Word、Excel、文本文件的方法

    這篇文章主要介紹了WinForm導(dǎo)出文件為Word、Excel、文本文件的方法,本文直接給出實(shí)現(xiàn)代碼,代碼中包含相應(yīng)注釋,需要的朋友可以參考下
    2015-03-03
  • C#常用的數(shù)據(jù)格式轉(zhuǎn)換匯總

    C#常用的數(shù)據(jù)格式轉(zhuǎn)換匯總

    這篇文章介紹了C#常用的數(shù)據(jù)格式轉(zhuǎn)換,有需要的朋友可以參考一下
    2013-10-10
  • Visual C#類的定義及實(shí)現(xiàn)方法實(shí)例解析

    Visual C#類的定義及實(shí)現(xiàn)方法實(shí)例解析

    這篇文章主要介紹了Visual C#類的定義及實(shí)現(xiàn)方法實(shí)例解析,對(duì)于新手來說有不錯(cuò)的借鑒學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2014-07-07
  • C#?將Excel轉(zhuǎn)為PDF時(shí)自定義表格紙張大小的代碼思路

    C#?將Excel轉(zhuǎn)為PDF時(shí)自定義表格紙張大小的代碼思路

    這篇文章主要介紹了C#?將Excel轉(zhuǎn)為PDF時(shí)自定義表格紙張大小的代碼思路,轉(zhuǎn)換前的頁(yè)面大小設(shè)置為該版本中寫入的新功能,在舊版本和免費(fèi)版本中暫不支持,感興趣的朋友跟隨小編一起看看實(shí)例代碼
    2021-11-11

最新評(píng)論

和平区| 萨迦县| 石城县| 新源县| 汝城县| 临江市| 长顺县| 冕宁县| 邵阳县| 红河县| 昭平县| 凌云县| 泾阳县| 沧州市| 侯马市| 雷州市| 普陀区| 镇康县| 将乐县| 乐都县| 巩义市| 含山县| 焦作市| 德令哈市| 红桥区| 西青区| 夏津县| 孝义市| 垫江县| 嘉禾县| 从江县| 泌阳县| 四川省| 抚州市| 云梦县| 青州市| 乌鲁木齐县| 稻城县| 太仆寺旗| 丘北县| 江源县|