Ing*_*ngo 5 java oop design-patterns interface
我认为,以下不能用Java完成.但我很乐意学习如何实现类似于它的东西.
假设我们有一个C类,它已经在编译代码中使用了.(我们既不能改变代码也不能改变C的原始定义).
进一步假设有一些有趣的代码可以重复使用,如果只有C实现接口I.事实上,导出D只是C +接口方法的实现,或多或少是微不足道的.
然而,一旦我有一个C,似乎没有办法说:我希望你成为一个D,也就是说,一个C实现我.
(旁注:我认为如果D是C,那么应该允许c的运行时类型为C的强制转换(D)c,并且C的唯一区别是添加方法.这应该是安全的,如果不是吗?)
怎么能解决这场灾难呢?
(我知道工厂设计模式,但这似乎不是一个解决方案.因为,一旦我们设法在以前是C的所有地方创建D,其他人发现另一个接口J有用并导出E扩展C实现J.但是E和D是不兼容的,因为它们都为C添加了一组不同的方法.因此,虽然我们总是可以传递一个预期C的E,但是我们不能通过一个预期D的E.而是,现在,我们需要一个新类F扩展C实现I,J.)
Aln*_*tak 10
难道你不能使用委托类,即包装"C类"实例的新类,还实现"接口I"?
public class D implements I {
private C c;
public D (C _c) {
this.c = _c;
}
public void method_from_class_C() {
c.method_from_class_C();
}
// repeat ad-nauseum for all of class C's public methods
...
public void method_from_interface_I() {
// does stuff
}
// and do the same for all of interface I's methods too
}
Run Code Online (Sandbox Code Playgroud)
然后,如果你需要调用一个通常采用类型参数的函数,I只需执行以下操作:
result = some_function(new D(c));
Run Code Online (Sandbox Code Playgroud)