类层次结构java的重复处理

时间:2015-01-21 22:47:19

标签: java

我们在两个包中有两个类似的层次结构。代码不是我们的,所以我们不能改变它。 我们必须以某种方式处理这些层次结构。到目前为止,我们最终复制了大量代码。例如,我们有两种方法:

  

void process(pckg1.Client客户端){...}

  

void process(pckg2.Client客户端){...}

除签名外,方法的主体是相同的。重复的数量很大,但不太可能证明反射的复杂性。 有没有更好的方法呢?

谢谢, 亚历

1 个答案:

答案 0 :(得分:3)

一种选择是包装pckg1.Clientpckg2.Client的共享方法:

public interface ClientWrapper {
    void sharedMethod();
}

public class Packg1ClientWrapper implements ClientWrapper {
     private final pckg1.Client client;
     public Pck2ClientWrapper(final pckg1.Client client) {
         this.client = client;
     }
     public void sharedMethod() {
         client.sharedMethod();
     }
}

public class Packg2ClientWrapper implements ClientWrapper {
     private final pckg2.Client client;
     public Pck2ClientWrapper(final pckg2.Client client) {
         this.client = client;
     }
     public void sharedMethod() {
         client.sharedMethod();
     }
}

然后,您可以在方法中使用ClientWrapper,并可选择提供创建包装器的实用程序方法。

public void process(final pckg1.Client client) {
    process(new Pckg1ClientWrapper(client));
}

public void process(final ClientWrapper wrapper) {
     wrapper.sharedMethod();
}

如果很少有外部类和大量自定义代码处理这些类,这显然才有意义。