您可以使用带有策略设计模式的 Java 泛型来克服这个问题:
假设您有两个“案例”Case1 和 Case2,我们将为每个案例“处理程序”调用具有 doSomething() 方法的类。
首先,我们将有一个定义处理程序的接口:
public interface Handler<TYPE1, TYPE2, TYPE3>{
void doSomething(TYPE1, TYPE2, TYPE3);
void doSomethingElse(TYPE3);
}
您的处理程序如下:
public class Case1Handler implements Handler<Case1Type1, Case1Type2, Case1Type3>{
public void doSomething(Case1Type1 t1, Case1Type2 t2, Case1Type3 t3){
// do case 1 business
}
public void doSomethingElse(Case1Type3 t3){
// do case 1 business
}
}
并且您将对 Case2 进行类似的实现。
现在,您仍然在为 doSomething() 和 doSomethingElse() 编写相同的业务两次,策略模式将在这里为您提供帮助。
基本上,您对不同类型的对象执行相同的业务。您可以将这些差异移至另一个类(策略)并将此策略注入到 Handler 的一个实现中。
public class HandlerImpl<TYPE1, TYPE2, TYPE3> implements Handler<TYPE1, TYPE2, TYPE3>{
private Strategy<TYPE1, TYPE2, TYPE3> strategy;
public HandlerImpl(Strategy<TYPE1, TYPE2, TYPE3> strategy){
this.strategy = strategy;
}
public void doSomething(TYPE1 t1, TYPE2 t2, TYPE3 t3){
// do your business using "strategy"
}
public void doSomethingElse(TYPE3 t3){
// do your business using "strategy"
}
}
这可能看起来有点矫枉过正,但绝对不是。这使您的代码更清晰,更改(添加新案例,更改业务)将更容易实现:)