【发布时间】:2016-09-26 02:28:00
【问题描述】:
我目前正在使用装饰器模式编写程序。我正在尝试找出如何限制我可以添加到第一堂课的装饰器数量。如:
Pizza plainPizza = new PlainPizza;
Pizza sausage = new Sausage(plainPizza);
如果我可以限制我添加的装饰器的数量,我该如何编写代码。例如,如果我尝试在前面的代码之上添加它:
Pizza pepperoni = new Pepperoni(sausage);
如何防止它允许添加/包装意大利辣香肠?
我正在尝试使用抛出异常,但问题是,我的装饰器调用了它的超类,所以我无法在初始化实例变量之前进行测试!
【问题讨论】:
-
你不能。这就是装饰器模式的重点。
-
听起来更像是装饰器模式不适合您的用例。
-
@XaverKapeller 这就是我的教授让我们在实验室做的事情。这是众多任务之一。不知道该怎么做。我试图抛出异常,但我不能,因为我在 count 测试发生之前调用了 super。
-
好吧,我告诉过你这是不可能的。从 api 的角度来看,在这里抛出异常也会很糟糕。你为施加这个约束所做的任何事情都会导致它不再是装饰器模式。
-
装饰器的作用是什么?计算浇头的成本?我同意模式解决的问题(包装)似乎对限制没有意义。
标签: java design-patterns decorator