【问题标题】:decorator pattern decorator limit装饰器模式装饰器限制
【发布时间】: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


【解决方案1】:

您可以使用Builder pattern 创建一个构建器,该构建器将应用您需要的所有类型的装饰器。 Builder 还可以在内部跟踪您应用了多少装饰器,并在尝试添加超过允许的数量时做出相应的反应。

【讨论】:

    猜你喜欢
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    相关资源
    最近更新 更多