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

本当に設計パターンを使用したい場合は、Chain of Responsibility があなたの状況に最も近いパターンだと思います。しかし、これはすぐに行き過ぎてしまう可能性があります

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 に答える