一个设计模式的问题,100分
程序里处理过程有很多If,else,switch,case,很多和状态有关,想用状态模式(state   patter)来重构,但不知道怎么实现?请高手指点。   
 举个例子,由于状态变量state值不同,下面程序每次即使相同的data输入这个函数走的流程都不同,导致了很多的if,else,或swich,case,如何重构?有点类似状态机   
 private   int   state   =   StateA;   
 public   void   ProcessFlow(IData   data) 
 { 
 	switch(state) 
 	{ 
 		case   StateA: 
 			ProcessA(data); 
    			ProcessB(data); 
 			state   =   StateB; 
 			break;    
 		case   StateB: 
 			ProcessB(data); 
 			ProcessA(data): 
 			state   =   StateC; 
 			break; 
 		case   StateC: 
 			ProcessA(data): 
 			state   =   StateA; 
 			break; 
 	} 
 }
------解决方案--------------------不管怎样改,类似的分支(if-else、switch-case以及配置文件里的配置项)是少不了的。 
------解决方案--------------------其实我个人来说很喜欢switch...
------解决方案--------------------我倒是有一个方法,但有一个前提,你的private int state的值是连续的吗? 
 如果是的话,你可以去看看我Blog的文章,有一篇就是专门讲这个的。 
 http://blog.csdn.net/wzd24/archive/2007/04/10/1558982.aspx
------解决方案--------------------用哈希表或者Dictionary 泛型集合类型,将state和对应的处理方法添加进去 
 可以保证你一个if..else/switch..case都不用   
 例如Dictionary <string,Delegate>  stateDictionary = new Dictionary <string,Delegate> (); 
 stateDictionary.Add( "State1 ",new MethodInvoker(method)); 
 //.....类似的状态语句行   
 调用时 
 Delegate methodInvoker = stateDictionary[ "StateName "]; 
 methodInvoker.DynamicInvoke(new object(){ params });
------解决方案--------------------OS_50() ( ) 信誉:100    Blog   加为好友  2007-05-15 17:24:39  得分: 0                
 期待 "状态模式 State Pattern "高手出现。。。     
 ------------------------------------------------------ 
 不解,为什么非要用状态模式??
------解决方案--------------------这种能改吗?期待中
------解决方案--------------------http://www.jdon.com/designpatterns/designpattern_State.htm
------解决方案--------------------建立一个基类State,若干个子类State,基类提供统一的处理方法,子类实现这个方法
------解决方案--------------------如果你的目的只是想简化代码提高代码的复用性, 
 要按你的代码的情况去用状态模式实现的话,代码量要增多 
 我认为用反射会模式会比较好(只做为参考和交流吧)   
 //以下是为代码 
 private int state = StateA; 
 hashtabl hst = new hashtable(); 
 hst.add(stateA ,  "ProcessA#ProcessB "); 
 hst.add(stateB ,  "ProcessB#ProcessA ");   
 public void ProcessFlow(IData data) 
 { 
    string stateSort = hst[stateA ].value ; 
    string[] strTemps = stateSort.splice( "# ") ; 
    Type[] typs = type[strTemps.length] ; 
    for(int i=0;i <typs.lenght ;i++) 
   { 
      typs[i] = Type.GetType(strTemps[i]) ; 
      ...... 
      menthedInfo.Invoke( obj , new object[]{ data } );   
   } 
   state = hst.key ; 
 }   
 如果是我误解了你的意思的话,一定要用状态模式做的话:那只能把每一种状态封装为一个类 
 以下是我写的为代码,有些逻辑问题,只做参考,如果有何更好改进请指教   
 ProcessMe proMe = new ProcessMe(1) ; 
 proMe.DoState(data) ;     
 pubilc abstract class ProcessMe 
 { 
   private int state ; 
   IData data ; 
   public Process( int state){....}   
   abstract public DoState( IData Data ) ;     
 }   
 public class ProcessA :ProcessMe 
 { 
   Process.DoState( IData Data)