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