設(shè)計模式之裝飾者模式,奶茶店場景
// See https://aka.ms/new-console-template for more information using System.Drawing; /*
裝飾者模式,不改變實現(xiàn)類的情況下,動態(tài)給實現(xiàn)類增加新功能,這里使用聚合關(guān)系實現(xiàn)
奶茶店 實現(xiàn)點奶茶加不同的料,計算價格的場景,使用裝飾者模式實現(xiàn) 優(yōu)點,新增一種小料時只需要實現(xiàn)IDecorator接口即可擴(kuò)展,符合開閉原則 */ var beverage = new MilkTea(); //先點一杯奶茶 beverage.Add(new Pudding()); //加一份布丁 beverage.Add(new Boba()); //加一份珍珠 Console.WriteLine($"Hello, World {beverage.Cost()}"); //算出價格 /// <summary> /// 飲料基類 /// </summary> abstract class Beverage { protected readonly List<IDecorator> decorators; //聚合多種小料 public Beverage() { decorators = new List<IDecorator>(); } public void Add(IDecorator decorator) { decorators.Add(decorator); } public abstract double Cost(); } /// <summary> /// 奶茶 /// </summary> class MilkTea : Beverage { private double PRICE = 15; public override double Cost() { return PRICE + decorators.Sum(s => s.Price); } } /// <summary> /// 水果茶 /// </summary> class FruitTea : Beverage { private double PRICE = 20; public override double Cost() { return PRICE + decorators.Sum(s => s.Price); } } /// <summary> /// 小料接口(裝飾者) /// </summary> interface IDecorator { double Price { get; set; } } /// <summary> /// 布丁 3元一份 /// </summary> class Pudding : IDecorator { public double Price { get; set; } = 3; } /// <summary> /// 珍珠 兩元一份 /// </summary> class Boba : IDecorator { public double Price { get; set; } = 2; }
Newd
版權(quán)聲明
作者:扶我起來我還要敲
地址:http://www.rzrgm.cn/Newd/p/17222901.html
? Newd 尊重知識產(chǎn)權(quán),引用請注出處
廣告位
(虛位以待,如有需要請私信)
浙公網(wǎng)安備 33010602011771號