程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#裝潢器形式(Decorator Pattern)實例教程

C#裝潢器形式(Decorator Pattern)實例教程

編輯:C#入門知識

C#裝潢器形式(Decorator Pattern)實例教程。本站提示廣大學習愛好者:(C#裝潢器形式(Decorator Pattern)實例教程)文章只能為提供參考,不一定能成為您想要的結果。以下是C#裝潢器形式(Decorator Pattern)實例教程正文


本文以實例情勢具體講述了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#法式設計的進修有所贊助。

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