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

}

//示例子子方法

public String subSubMethod1(Object o){

//etc etc

return "";

}

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

有这样的设计模式吗?

4

2 回答 2

5

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

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); 
于 2013-10-10T01:13:47.797 回答
2

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

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

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

于 2013-10-09T20:09:20.420 回答