在装饰器模式中,如何确保最低级别的元素不是装饰器?

问题描述 投票:0回答:1

在Decorator模式中,应该将装饰器包裹在一个中央ConcreteComponent周围。但是从查看类图(from Wikipedia)可以看到的是,没有什么阻止我使用ConcreteDecorator作为中心元素。而且这显然不是很好,因为operation()的实现很可能包含super.operation()。我在这里想念什么吗?有没有我看不到的保护措施可以确保要装饰的中央元素是ConcreteComponent?]

decorator pattern class diagram

design-patterns decorator
1个回答
0
投票

您不需要这样的支票。此外-您不仅不需要它,而且您真的不应该拥有它。拥有一个将破坏抽象。

相反,您可以有更简单的限制-如果没有要装饰的东西就不能创建装饰器。即,它没有no-arg构造函数,并且您以某种方式检查了其装饰不为null的组件。这样,装饰器必须装饰某种东西,无论是混凝土构件还是其他装饰器。反过来,该装饰器还必须装饰某些东西,依此类推,直到找到可以凭空创建的组件,而无需其他组件。

© www.soinside.com 2019 - 2024. All rights reserved.