您可以使用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