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

首頁 > 編程 > C# > 正文

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

2020-01-24 02:25:23
字體:
供稿:網(wǎng)友

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

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

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

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

所有的產(chǎn)品都必須繼承這個基類,比如家居用品、電器產(chǎn)品等,把這些具體的產(chǎn)品提煉成一個繼承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. 平底鍋 + 醬油 + 老壇酸菜  

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

現(xiàn)在把醬油、老壇酸菜也設(shè)計成繼承ProductBase的子類,也就是裝飾器類。不過,與ConcretProuct類不同的是,裝飾器類需要引用ProductBase,在這里,無論是顯示產(chǎn)品組合還是計算產(chǎn)品產(chǎn)品組合價格,都離不開這個引用的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)品名稱的時候,把裝飾器類Decorator引用的ProductBase的名稱和當前名稱組合起來,以逗號分隔;顯示產(chǎn)品價格的時候,把引用的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("產(chǎn)品組合:{0}   價格:{1}", product.GetName(), product.GetPrice());    }}

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 龙陵县| 赤城县| 化州市| 攀枝花市| 奉化市| 大理市| 威宁| 麻栗坡县| 武义县| 克拉玛依市| 温宿县| 呼伦贝尔市| 正宁县| 江孜县| 兴山县| 玉环县| 靖西县| 讷河市| 景洪市| 彭泽县| 马公市| 怀安县| 榆社县| 舞钢市| 和平县| 措勤县| 白银市| 郸城县| 柳州市| 竹溪县| 太和县| 集贤县| 磴口县| 宝鸡市| 呼玛县| 新化县| 普兰县| 马山县| 商城县| 平邑县| 沙坪坝区|