模拟自助餐厅
装饰器是结构设计模式之一。它用于添加,删除或更改对象的行为。本文档将教你如何正确使用 Decorator DP。
让我通过一个简单的例子向你解释它的想法。想象一下,你现在在着名的咖啡公司 Starbobs。你可以订购任何你想要的咖啡 - 奶油和糖,奶油和馅料以及更多组合! 但是,所有饮料的基础是咖啡 - 黑暗,苦酒,你可以修改。让我们写一个模拟咖啡机的简单程序。
首先,我们需要创建和抽象描述我们的基础饮料的类:
public abstract class AbstractCoffee
{
protected AbstractCoffee k = null;
public AbstractCoffee(AbstractCoffee k)
{
this.k = k;
}
public abstract string ShowCoffee();
}
现在,让我们创造一些额外的东西,比如糖,牛奶和浇头。创建的类必须实现 AbstractCoffee
- 它们将装饰它:
public class Milk : AbstractCoffee
{
public Milk(AbstractCoffee c) : base(c) { }
public override string ShowCoffee()
{
if (k != null)
return k.ShowCoffee() + " with Milk";
else return "Milk";
}
}
public class Sugar : AbstractCoffee
{
public Sugar(AbstractCoffee c) : base(c) { }
public override string ShowCoffee()
{
if (k != null) return k.ShowCoffee() + " with Sugar";
else return "Sugar";
}
}
public class Topping : AbstractCoffee
{
public Topping(AbstractCoffee c) : base(c) { }
public override string ShowCoffee()
{
if (k != null) return k.ShowCoffee() + " with Topping";
else return "Topping";
}
}
现在我们可以制作我们最喜欢的咖啡
public class Program
{
public static void Main(string[] args)
{
AbstractCoffee coffee = null; //we cant create instance of abstract class
coffee = new Topping(coffee); //passing null
coffee = new Sugar(coffee); //passing topping instance
coffee = new Milk(coffee); //passing sugar
Console.WriteLine("Coffee with " + coffee.ShowCoffee());
}
}
运行代码将产生以下输出:
与顶部的咖啡用糖用牛奶