在Decorator模式中,应该将装饰器包裹在一个中央ConcreteComponent周围。但是从查看类图(from Wikipedia)可以看到的是,没有什么阻止我使用ConcreteDecorator作为中心元素。而且这显然不是很好,因为operation()
的实现很可能包含super.operation()
。我在这里想念什么吗?有没有我看不到的保护措施可以确保要装饰的中央元素是ConcreteComponent?]
您不需要这样的支票。此外-您不仅不需要它,而且您真的不应该拥有它。拥有一个将破坏抽象。
相反,您可以有更简单的限制-如果没有要装饰的东西就不能创建装饰器。即,它没有no-arg构造函数,并且您以某种方式检查了其装饰不为null的组件。这样,装饰器必须装饰某种东西,无论是混凝土构件还是其他装饰器。反过来,该装饰器还必须装饰某些东西,依此类推,直到找到可以凭空创建的组件,而无需其他组件。