我有一个实现接口的类。还有另一个类也实现了这个接口,第二个类的一个实例支持我的类的实现。
对于接口指定的许多方法,我的类只是将它们直接转发给第二个类。
public class MyClass implements MyInterface
{
private OtherClass otherClassInstance; // Also implements MyInterface.
// ...
void foo() { otherClassInstance.foo(); }
void bar() { otherClassInstance.bar(); }
void baz() { otherClassInstance.baz(); }
// ...
}
简单地从第二个类派生我的类将消除所有这些,但这没有意义,因为这两个类彼此无关(除了实现一个公共接口之外)。它们代表不同的东西——碰巧我的很多类的实现都复制了另一个类的实现。换句话说,我的类是在第二类之上实现的,但它本身并不是第二类的子集。众所周知,继承是为了表达“is-a”关系,而不是共享实现,所以在这种情况下是不合适的。
Joshua Bloch 演讲的这一部分很好地说明了这种情况。
我知道 Java 对委派没有任何语言支持。但是,是否至少有某种方法可以清理我的类的实现,所以它不是那么多余?