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#法式設計的進修有所贊助。