调用两个不同类的相同方法

时间:2018-07-09 18:46:07

标签: java oop

我正在使用某些无法修改的类

  • GenericRequest
  • SpecificRequest1(扩展了GenericRequest)
  • SpecificRequest2(扩展了GenericRequest)

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,但这就是想法。您是否认为可以对此做一些干净的事情?还是我必须创建两个不同的方法来同时处理SpecificRequest1SpecificRequest2

1 个答案:

答案 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中的布尔值))