装饰设计模式暧昧

时间:2015-03-17 11:52:28

标签: java design-patterns decorator

以简单的类图为例

enter image description here

我的问题为什么我们需要OptionalWrapperOptionalOneOptionalTwoOptionalThree实现Interface是不够的,因为我们需要的只是装饰器类中的Interface类型的对象。

4 个答案:

答案 0 :(得分:4)

OptionalWrapper是您添加对正在装饰的类的引用的位置,并将其所有方法重定向到该实例。如果您没有OptionalWrapper,那么您需要在每个子类中重复此代码。在给定的图中,每个子类只需要覆盖它们应该修改的行为。

答案 1 :(得分:2)

更具体的示例:您想要添加异常处理。你可以在OptionalWrapper中完成一次并完成,或者你可以在三个子类中的每一个中实现它(以及你实现接口的每个新类)。

答案 2 :(得分:0)

1)在您的示例中,如果您决定在所有装饰器OptionalOneOptionalTwoOptionalThree中添加新行为,那么您将在Interface中添加新方法但这会影响CoreFunactionality。所以要分开这个,你需要一个更多的接口/抽象类OptionalWrapper

2)所有装饰者只需处理OptionalWrapper并且不担心它正在装饰的实例。

答案 3 :(得分:0)

这里的可选包装器是你的Decorator类,在大多数情况下它都是抽象的。它增强了对象的责任。如果在界面中添加一些不需要在可选类(optional1,optiona2等)中实现的功能,那么你需要一个抽象的可选包装器。