Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用继承与接口的装饰器设计模式_Java_Design Patterns_Decorator - Fatal编程技术网

Java 使用继承与接口的装饰器设计模式

Java 使用继承与接口的装饰器设计模式,java,design-patterns,decorator,Java,Design Patterns,Decorator,我想使用继承(decoratorextensedcomponent)实现Decorator设计模式,因为我需要访问组件类的受保护字段/方法 问题在于,组件类表示一个算法,它在构造时执行一些预处理,并保存大量数据。现在,每次我装饰一个组件时,我都会创建一个新的装饰器实例,它需要构造一个新的(无用的)组件实例来执行不需要的计算并保存不需要的数据 我想使用接口而不是继承,但这样我就无法访问组件的受保护信息 在扩展组件类时,我担心资源浪费是对的吗?如果是这样的话,我如何避免它而不失去我所需要的信息 最后

我想使用继承(
decoratorextensedcomponent
)实现Decorator设计模式,因为我需要访问组件类的受保护字段/方法

问题在于,组件类表示一个算法,它在构造时执行一些预处理,并保存大量数据。现在,每次我装饰一个组件时,我都会创建一个新的装饰器实例,它需要构造一个新的(无用的)组件实例来执行不需要的计算并保存不需要的数据

我想使用接口而不是继承,但这样我就无法访问组件的受保护信息

在扩展组件类时,我担心资源浪费是对的吗?如果是这样的话,我如何避免它而不失去我所需要的信息

最后一点注意:我可以创建Decorator实例,为它提供“虚拟”数据,这样它将执行最小的计算量,但是这个解决方案感觉很混乱


谢谢。

我不确定这是否算作装饰图案。听起来更像是普通的古老遗产

扩展组件类时,我担心资源浪费是对的吗?

显然这取决于你浪费了多少资源

如果是这样,我如何避免它而不失去对我所需信息的访问权?


您可以通过扩展组件并添加访问所需受保护部件的方法来“打开”组件。然后使用接口和组合来实现这个新类的装饰器。

显然,您的
组件
类不是设计为“被装饰的”。你想过重构它吗