【发布时间】:2011-08-25 08:12:10
【问题描述】:
如果被装饰的对象实现了其他接口的不同组合,你如何在不丢失额外接口方法的情况下实现装饰器?例如,假设我们有以下类和接口,其中 I 是我们关心的装饰,D 是装饰器的实现:
class C1 implements I, I1, I2
class C2 implements I, I2, I3
class C3 implements I, I3, I4
class D implements I {
I wrappedValue
// Methods for I
}
一旦我们用封装的 I(可能是 C1、C2 或 C3)实例化 D 的实例,我们就无法访问封装的 I 可能实现的 I1、I2、I3 和 I4 的其他方法。
【问题讨论】:
-
如果
D的实例在概念上不是其中一个接口的实例,我认为您并没有真正“失去”其他方法。
标签: java design-patterns inheritance casting decorator