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

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

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

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

現假設有一個公司要做產品套餐,即把不同的產品組合在一起,不同的組合對應不同的價格。最終呈現出來的效果是:把產品組合的所有元素呈現出來,并顯示該組合的價格。

每個產品都有名稱和價格,首先設計一個關于產品的抽象基類。

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

所有的產品都必須繼承這個基類,比如家居用品、電器產品等,把這些具體的產品提煉成一個繼承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;
    }
}

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

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

在這里,可以把醬油,老壇酸菜看作是裝飾器,因為每加一個產品,都是在原有的基礎上增加的。比如做"平底鍋 + 醬油"這個組合,是在"平底鍋"的基礎上增加了"醬油"。

現在把醬油、老壇酸菜也設計成繼承ProductBase的子類,也就是裝飾器類。不過,與ConcretProuct類不同的是,裝飾器類需要引用ProductBase,在這里,無論是顯示產品組合還是計算產品產品組合價格,都離不開這個引用的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;
    }
}

以上,顯示產品名稱的時候,把裝飾器類Decorator引用的ProductBase的名稱和當前名稱組合起來,以逗號分隔;顯示產品價格的時候,把引用的ProductBase的價格和當前價格相加。

客戶端如下:

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("產品組合:{0}   價格:{1}", product.GetName(), product.GetPrice());
    }
}

運行結果如下圖所示:

希望本文所述對大家C#程序設計的學習有所幫助。

相關文章

  • C#的SQL操作類實例

    C#的SQL操作類實例

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

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

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

    XAML如何獲取元素的位置

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

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

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

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

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

    WinForm生成驗證碼圖片的方法

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

    WinForm導出文件為Word、Excel、文本文件的方法

    這篇文章主要介紹了WinForm導出文件為Word、Excel、文本文件的方法,本文直接給出實現代碼,代碼中包含相應注釋,需要的朋友可以參考下
    2015-03-03
  • C#常用的數據格式轉換匯總

    C#常用的數據格式轉換匯總

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

    Visual C#類的定義及實現方法實例解析

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

    C#?將Excel轉為PDF時自定義表格紙張大小的代碼思路

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

最新評論

广灵县| 连江县| 正镶白旗| 临漳县| 鄂州市| 淮安市| 蒙阴县| 莱西市| 辉县市| 光山县| 湖州市| 顺平县| 剑河县| 达尔| 南开区| 吐鲁番市| 康保县| 峨眉山市| 德保县| 南靖县| 克拉玛依市| 南皮县| 望谟县| 同仁县| 阳江市| 扶绥县| 勃利县| 和平县| 喀喇沁旗| 崇州市| 军事| 峡江县| 和龙市| 贵港市| 绿春县| 涡阳县| 台江县| 格尔木市| 华宁县| 剑河县| 金川县|