我有一個接口,讓我們說2個方法,並有3個不同的實現。帶任務委託的責任鏈設計模式推薦
public interface IFace {
public void method1(Param param1);
public void method2(Param param2);
}
public class A implements IFace {
public void method1(Param param1){}
public void method2(Param param2){}
}
public class B implements IFace {
public void method1(Param param1){}
public void method2(Param param2){}
}
public class C implements IFace {
public void method1(Param param1){}
public void method2(Param param2){}
}
現在我有一個要求,因爲每隻有這兩種方法中的一種,需要改進和有一些先決條件按我決定調用特定的實現和模式是,我可能有辦法逐個完成這些實現。這似乎像一個完美的適合責任鏈,我創建了一個這樣的:
public interface IChain {
public void method1(Param param1);
public void setNextChain(IChain iChain);
}
public class AA implements IChain {
private IChain chain;
private IFace a;
public void method1(Param param1){
if (thisConditionIsSatisfied(param1)) {
a.method1(param1);
} else {
chain.method1();
}
}
public void setNextChain(IChain chain){
this.chain = chain
}
public void setA(IFace a) {
this.a = a;
}
}
public class BB implements IChain {
private IChain chain;
private IFace b;
public void method1(Param param1){
if (thisConditionIsSatisfied(param1)) {
b.method1(param1);
} else {
chain.method1();
}
}
public void setNextChain(IChain chain){
this.chain = chain
}
public void setA(IFace b) {
this.b = b;
}
}
public class CC implements IChain {
private IChain chain;
public void method1(Param param1){
if (thisConditionIsSatisfied(param1)) {
//process it here
} else {
throw new RuntimeException("Couldn't process request.")
}
}
public void setNextChain(IChain chain){
this.chain = chain
}
}
正如你所看到的,CC不委託給其實施IFACE,是一個完全新的實現C類。
這是我顯示非常小的一部分,但問題實際上是我在條件評估,異常處理方面看到了很多重複的相同,調用正確實施的接口等
儘管這比嘗試擴展現有接口要好得多,但我想知道是否有任何建議使它在未來的可擴展性或OOPS模式方面更好。
這個問題不是更適合軟件工程嗎? (我真的在問我個人不在乎它是否在這裏) – Oleg
@Oleg是的,它會更適合於SoftwareEngineering StackExchange –
@VinceEmigh在引用其他網站時,指出交叉發佈是不被贊同的](https://meta.stackexchange.com/tags/cross-posting/info) – gnat