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

时间:2011-05-31 10:36:54

标签: java design-patterns decorator

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

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

我想使用接口而不是继承,但后来我无法访问Component的受保护信息。

在扩展Component类时,我是否担心浪费资源?如果是这样,我怎样才能避免它而不会失去对我所需信息的访问权?

最后一点说明:我可以创建Decorator实例,为其提供“虚拟”数据,这样它就可以执行最少量的计算,但这个解决方案感觉很乱。

谢谢。

2 个答案:

答案 0 :(得分:2)

我不确定这实际上是否算作装饰模式。听起来更像是普通的遗产。

  

在扩展Component类时,我是否担心浪费资源?

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

  

如果是这样,如何在不失去对所需信息的访问权限的情况下避免使用它?

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

答案 1 :(得分:2)

显然,您的Component课程并非设计为“装饰”。你有没有想过重构它?