我有两个类(比如B& C),它们都来自一个类(比如说A).现在我需要编写一个类(比如D),它应该在运行时从B或C动态派生.
B,C& A是通过库提供给我的类,我控制的唯一类是D类.如何针对上述约束编写D.显然,B和C来自不同的供应商,因此需要在D中覆盖不同的方法,具体取决于它的父类.
最佳答案
您应该定义一个接口I,然后定义对应于B和C的具体实现.在运行时,您可以使用工厂方法确定I的哪个实现是必要的.那么你的代码只需要调用I的方法而不是B或C的方法.
原文链接:https://www.f2er.com/android/431298.html编辑
关于它是如何工作的似乎有些混乱.您想要的是您的业务逻辑在属于您的一致,稳定的API上运行.为此,您将创建一个我们称之为I的接口.现在您需要适应(A,B和C)所需的不同外部类的实现类.它可能看起来像这样:
public interface I {
void doSomething();
}
public class IA implements I {
private A a;
public IA(A a) {
this.a = a;
}
public void doSomething() {
// specific to A
a.doSomethingUnique();
}
}
// similar implementation classes for B and C
现在,您需要在运行时获取特定于当前情况的I实例.无论通知您何时在运行时使用哪个特定类都可以用于此目的.在最坏的情况下,你可以这样做:
// in some util class
public static I getI(Object obj) {
if (obj instanceof A) {
return new IA((A) obj);
} else if (obj instanceof B) {
return new IB((B) obj);
} else if (obj instanceof C) {
return new IC((C) obj);
}
// maybe throw an exception? or return a mock I implementation?
}