【发布时间】:2009-08-08 18:01:39
【问题描述】:
我发现装饰器模式最令人困惑。请考虑“Head first design patterns book”中提供的示例。
所以要得到一个带有双摩卡和鞭子的DarkRoast,你必须写
Beverage beverage2 = new DarkRoast();
beverage2 = new Mocha(beverage2);
beverage2 = new Mocha(beverage2);
beverage2 = new Whip(beverage2);
我觉得这是不必要的。这是我的实现,
interface Beverage
{
int Cost();
}
class DarkRoast : Beverage
{
/* .... */
}
class Mocha : Beverage
{
/* .... */
}
class Whip : Beverage
{
/* .... */
}
// here is the changed part
class Order
{
List<Beverage> beverages = new List<Beverage> beverages();
public void AddItem(Beverage b)
{
beverages.Add(b);
}
public int Cost()
{
int cost;
foreach(Beverage b in beverages)
cost += b.Cost();
}
}
// use it like
Order order = new Order();
order.AddItem(new DarkRoast());
order.AddItem(new Mocha());
order.AddItem(new Mocha());
order.AddItem(new Whip());
int cost = order.Cost();
IMO,两者都一样。如果是,这里使用装饰器模式有什么好处?
有什么想法吗?
【问题讨论】:
标签: c# java design-patterns