Java 装饰设计模式模棱两可
让我们以简单类图为例Java 装饰设计模式模棱两可,java,design-patterns,decorator,Java,Design Patterns,Decorator,让我们以简单类图为例 我的问题是为什么我们需要OptionalWrapper?OptionalOne、OptionalTwo和OptionalThree实现Interface,这还不够吗?因为我们只需要装饰器类中对象的Interface类型。OptionalWrapper就是向要装饰的类添加引用的地方,并将其所有方法重定向到该实例。如果没有OptionalWrapper,则需要在其每个子类中重复此代码。在给定的图中,每个子类只需覆盖它们应该修改的行为。一个更具体的示例:您想要添加异常处理。您可
我的问题是为什么我们需要
OptionalWrapper
?OptionalOne
、OptionalTwo
和OptionalThree
实现Interface
,这还不够吗?因为我们只需要装饰器类中对象的Interface
类型。OptionalWrapper
就是向要装饰的类添加引用的地方,并将其所有方法重定向到该实例。如果没有OptionalWrapper
,则需要在其每个子类中重复此代码。在给定的图中,每个子类只需覆盖它们应该修改的行为。一个更具体的示例:您想要添加异常处理。您可以在OptionalWrapper中完成一次,也可以在三个子类(以及实现接口的每个新类)中实现它 1)在您的示例中,如果您决定在所有装饰器OptionalOne
、OptionalTwo
和OptionalThree
中添加新行为,那么您将在界面
中添加新方法,但这会影响核心功能性
。因此,要将其分开,您需要另外一个接口/抽象类OptionalWrapper
2) 所有的装饰器只需要处理
OptionalWrapper
,不必担心它装饰的是什么实例。这里optional wrapper是您的装饰器类,在大多数情况下是抽象的。它增强了对象的责任。如果在接口中添加了一些不需要在可选类(optional1、optiona2等)中实现的功能,则需要一个抽象的可选包装。使用OptionalWrapper
可以在类中注入依赖项。这样,您就可以在OptionalWrapper
中更改实现细节,而无需更改OptionalOne
、OptionalTwo
、OptionalThree
中的任何内容。所有OptionalOne/Two/Three类都将实现可能重复的doThis()
OptionalWrapper
将不会实现doThis()
。在OptionalWrapper中,我们不会将引用添加到您正在装饰的类中,而是将引用添加到OptionalOne/Two/Three类中…@Junaid如果接口有doThis()以外的其他方法,该怎么办?是否要在所有子类中重复代码?因此1)OptionalWrapper
只是为了可恢复性,对吗?2)它在装饰物品方面没有起到任何作用,对吗?@Junaid是的,这两个都是正确的OptionalWrapper
只是公开了一组方法,这些方法调用wrapee
实例上的相应方法。通过重写其中一些方法,可以在其子类中进行修饰。