【发布时间】:2011-12-24 21:28:51
【问题描述】:
我想知道如何将状态添加到可供消费者使用的装饰器链中。鉴于此简化模型:
abstract class AbstractPizza
{
public abstract print(...);
}
class Pizza : AbstractPizza
{
public int Size { get; set; }
public print(...);
}
abstract class AbstractPizzaDecorator
{
public Pizza:AbstractPizza;
public abstract print();
}
class HotPizzaDecorator : AbstractPizzaDecorator
{
public int Hotness { get; set; }
public print(...);
}
class CheesyPizzaDecorator : AbstractPizzaDecorator
{
public string Cheese { get; set; }
public print(...);
}
void Main()
{
BigPizza = new Pizza();
BigPizza.Size = 36;
HotBigPizza = new HotPizzaDecorator();
HotBigPizza.Pizza = BigPizza;
HotBigPizza.Hotness = 3;
HotBigCheesyPizza = new CheesyPizzaDecorator();
HotBigCheesyPizza.Pizza = HotBigPizza;
HotBigCheesyPizza.Cheese = "Blue";
HotBigCheesyPizza.print();
HotBigCheesyPizza.size = 28; // ERRRRRR !
}
现在,如果他们都实现了 print 方法并通过链传播它,那就很好了。但这对国家有什么作用?我无法访问 HotBigCheesyPizza 上的 size 属性。
我缺少什么?错误的模式?
感谢您的帮助! 干杯
【问题讨论】:
-
如果您的 HotPizzaDecorator 不接受 CheesyPizzaDecorator,您将如何构建 HotBigCheesyPizza...您能举个例子吗?
标签: oop design-patterns implementation decorator state