以简单的类图为例
我的问题为什么我们需要OptionalWrapper
? OptionalOne
,OptionalTwo
和OptionalThree
实现Interface
是不够的,因为我们需要的只是装饰器类中的Interface
类型的对象。
答案 0 :(得分:4)
OptionalWrapper
是您添加对正在装饰的类的引用的位置,并将其所有方法重定向到该实例。如果您没有OptionalWrapper
,那么您需要在每个子类中重复此代码。在给定的图中,每个子类只需要覆盖它们应该修改的行为。
答案 1 :(得分:2)
更具体的示例:您想要添加异常处理。你可以在OptionalWrapper中完成一次并完成,或者你可以在三个子类中的每一个中实现它(以及你实现接口的每个新类)。
答案 2 :(得分:0)
1)在您的示例中,如果您决定在所有装饰器OptionalOne
,OptionalTwo
和OptionalThree
中添加新行为,那么您将在Interface
中添加新方法但这会影响CoreFunactionality
。所以要分开这个,你需要一个更多的接口/抽象类OptionalWrapper
。
2)所有装饰者只需处理OptionalWrapper
并且不担心它正在装饰的实例。
答案 3 :(得分:0)
这里的可选包装器是你的Decorator类,在大多数情况下它都是抽象的。它增强了对象的责任。如果在界面中添加一些不需要在可选类(optional1,optiona2等)中实现的功能,那么你需要一个抽象的可选包装器。