轉送,當對於一個複雜的問題處理,可以把問題拆解成多個單一的問題處理方法(Support)每個Support,遇到丟進來的問題,會試著去解決
Support.support(trouble)
當無法解決時,就看看是否已經有利用Support.setNext(nextSupport),設定好下一個Support
如果有,就把問題丟給下一個support處理
nextSupport.support(trouble)
這樣的做法,可以讓每個Class可以很單純的處理一個問題,而且可以彈性的串接不同的Command
參與者
1.abstract Support
在Support這主要的Class內定義好程式判斷的流程,也就是support function
決定了判斷邏輯,後面繼承者,只需要把問題處理的部份(resolve)實作即可
public abstract class Support {
public Support setNext(Support next){
this.next=next;
return next;
}
public final void support(Trouble trouble){
if(resolve(trouble)){
success();
}else{
fail();
if(next!=null){
next.support(trouble);
}
}
}
protected abstract boolean resolve(Trouble trouble);
private void success(){}
private void fail(){}
}
2.RealSupport
可以針對各式的解決方法,產生多個不同的support子類別
每個class的都只要針對resolve function實作處理的結果即可
public Class RealSupport01 extends Support{
protected boolean resolve(Trouble trouble){
......
}
}
public Class RealSupport02 extends Support{
protected boolean resolve(Trouble trouble){
......
}
}
4.Trouble
public Class Trouble{...}
5.Main
外部程式,產生各個解決問題的support實體,並利用
setNext設定其解決問題的順序
Support sp1=new RealSupport01();
Support sp2=new RealSupport02();
sp1.setNext(sp2);
sp1.support(new Trouble());
沒有留言:
張貼留言