2013-10-09 21 views
0

說我稱之爲方法。我想從該方法返回值。但是,此方法將任務委託給其他方法,而這些方法又可以將任務委派給其他方法。最頂端方法返回的值最終由子方法和子方法的子方法確定。通過方法鏈返回值給調用者

想象一下這樣的情景:

public String method1(Object o){ 

if(x) 
return subMethod1(o); 
if(y) 
return subMethod2(o); 
if(z) 
return subMethod3(o); 
else 
return ""; 

} 

//例如個子方法

public String subMethod1(Object o){ 

if(a) 
return subSubMethod1(o); 
if(b) 
return subSubMethod2(o); 
if(c) 
return subSubMethod3(o); 
else 
return ""; 

} 

//例如subsubmethod

public String subSubMethod1(Object o){ 

//etc etc 

return ""; 

} 

這是一個重複出現的問題,對我來說,我很希望有解決這類問題的設計模式。

有沒有這樣的設計模式?

回答

2

條件運算符,使每一組的選擇很簡單 - 如果你正確地攤開來,它真的很容易閱讀,一旦你得到了圖案的竅門:

return x ? subMethod1(o) 
    : y ? subMethod2(o) 
    : z ? subMethod3(o) 
    : ""; 

當然,如果你的決定可能會沿着多態行(即條件映射到對象在執行時的類型)佈局,然後你可以用繼承來解決這個問題。但是如果你真的需要這樣的多重條件,那麼條件運算符會非常有用。

3

如果你真的想要設計模式,責任鏈是我能想到的最適合您的情況的模式。但是,這可能走極端很快

public interface Handler{ 

    void setNext(Handler h); 

    String handle(Object o); 
} 


public class Method1Handler implements Handler{ 
    private Handler next; 

    @Override 
    public void setNext(Handler h){ 
     this.next= h; 
    } 

    @Override 
    public String handle(Object o){ 
     if(x){ 
     return subMethod1(); 
     }else if(next !=null){ 
     return next.handle(o); 
     } 
     return ""; 

    } 

} 

當然subMethod1()也將使用肺心病等,可以得到相當難看,但頂層是乾淨的:

//top level of code 
Method1Handler handler = new Method1Handler(); 
//...lots of set next 
//...and set next of nexts etc 
//... 
return myHandler.handle(o); 
相關問題