【问题标题】:Returning a value to caller via chain of methods通过方法链将值返回给调用者
【发布时间】:2013-10-17 08:57:16
【问题描述】:

假设我调用了一个方法。我想要该方法的返回值。但是,此方法将任务委托给其他方法,而这些方法又可以将任务委托给其他方法。最顶层方法最终返回的值最终由子方法和子方法的子方法决定。

想象一下这个场景:

 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 "";

}

//示例子子方法

public String subSubMethod1(Object o){

//etc etc

return "";

}

这对我来说是一个反复出现的问题,我希望有一种设计模式可以解决这类问题。

有这样的设计模式吗?

【问题讨论】:

    标签: java design-patterns return return-value


    【解决方案1】:

    如果您真的想要采用设计模式,责任链是我能想到的最适合您的情况的模式。但这可能很快就过火了

    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() 也会使用 CoR 等。它可能会变得很丑,但顶层是干净的:

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

    【讨论】:

      【解决方案2】:

      条件运算符使每组选择变得简单——如果你正确地布局它,一旦你掌握了模式的窍门,它真的很容易阅读:

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

      当然,如果您的决定实际上可以按照多态线(即条件映射到对象在执行时的类型)进行布局,那么您可以使用继承来解决这个问题。但如果你真的只需要这样的多个条件,条件运算符会很有帮助。

      【讨论】:

        猜你喜欢
        • 2011-01-05
        • 1970-01-01
        • 1970-01-01
        • 2010-09-28
        • 2010-11-16
        • 2011-07-26
        • 1970-01-01
        • 2018-06-06
        • 2019-11-19
        相关资源
        最近更新 更多