我正在使用某些无法修改的类:
SpecificRequest类都共享许多方法(但是这些方法未在GenericRequest中声明,我知道这很不好,但是我无法更改)。
我想创建一个像这样的方法(以尽可能分解):
private void fillRequest( GenericRequest p_request, boolean p_specificModeOne ) {
if( p_specificModeOne ) {
SpecificRequest1 l_specificRequest = (SpecificRequest1) p_request;
}
else {
SpecificRequest2 l_specificRequest = (SpecificRequest2) p_request;
}
l_specificRequest.commonMethod1();
l_specificRequest.commonMethod2();
}
我知道这不是有效的Java,但这就是想法。您是否认为可以对此做一些干净的事情?还是我必须创建两个不同的方法来同时处理SpecificRequest1
和SpecificRequest2
?
答案 0 :(得分:2)
这是一个著名的模式适配器。代码看起来像这样:
class GenericRequest {}
class SpecificRequest1 extends GenericRequest {
void method1() {
System.out.println("specific1");
}
}
class SpecificRequest2 extends GenericRequest {
void method2() {
System.out.println("specific2");
}
}
interface ReqInterface {
void method();
}
class Specific1 implements ReqInterface {
private final SpecificRequest1 req =new SpecificRequest1();
@Override
public void method() {
req.method1();
}
}
class Specific2 implements ReqInterface {
private final SpecificRequest2 req =new SpecificRequest2();
@Override
public void method() {
req.method2();
}
}
public class Production {
void method(ReqInterface req) {
req.method();
}
public static void main(String[] args) {
Production l3 = new Production();
l3.method(new Specific1());
l3.method(new Specific2());
}
}
尝试不惜一切代价避免方法参数和instanceof
中的布尔值))