您可以使用Java泛型与策略设计模式来解决这个问题:
让我们假设你有两个“案件”情况1和情况2,和你,我们称之为具备为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
}
}
,你就会有案例2有着相似的应用。
现在,您仍然编码doSomething()和doSomethingElse()两次相同的业务,Strategy Pattern可以帮助您。
基本上,您可以对不同类型的对象执行相同的业务。您可以将这些差异移到另一个类别(策略),并将此策略注入执行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"
}
}
这看起来有点矫枉过正,但绝对不是。这使得你的代码更清洁,更改(添加新案例,改变业务)将更容易实现:)
这是什么情况?这是一堂课吗?参数类型之间是否存在关系?这个问题很难理解。 – ftr
我不清楚你的符号。是'A','B'等类名?参数列表中的“A”与“From A”中的A相同吗?什么是设计问题? –
你不能简单地使用重载? – adarshr