2012-04-24 40 views
0

我有一個狀態驅動的類,它根據發生的情況改變狀態。這個班級有一個州屬性,這個州屬性被許多地方用各種方法撒在代碼中。將方法名稱傳遞給狀態更改對象的選項

因此其不容易/顯而易見的臨場狀態變化的邏輯是什麼,所以我想在一個專用的方法集中的狀態變化,沿着下面的僞代碼的

- (void) updateState: (Param) action 
{ 
    switch (self.currentState) 
    case: EStateA: 
      if (action == connectionSuccesful) 
       self.currentState = EStateB; 
      else 
       self.currentState = EStateC; 
    break; 
} 


- (void) delegateCallbackConnectionSuccess 
{ 
    [self updateState: Param]; 
} 

所以東西線updateState方法需要知道爲了改變狀態而發生了什麼動作,一個動作被封裝爲一個方法,因此updateState方法需要知道調用它的方法。

所以我的問題是如何最好地實現這個,Param應該是什麼類型? 有什麼選擇? SEL,@選擇器,NSInvocation,其他的東西?

TIA

(實現一個完全成熟的狀態模式似乎矯枉過正,除非其在iOS的易)

回答

0

爲什麼沒有方法通過國家進入updateState:?

E.g.

typedef enum { 
    EStateA, 
    EStateB 
} EState; 

- (void) updateState: (EState) newState { 
    switch (self.currentState): { 
     ... 
    } 
    self.currentState = newState; 
} 

- (void) delegateCallbackConnectionSuccess { 
    [self updateState:EStateB]; 
} 
+0

這樣,每一種方法需要知道隨之而來的是什麼狀態,而集中這意味着只有本身需要知道如何進步,這是擺在首位進行集中點的狀態的方法 - 去耦如何認識從每個單獨的方法轉變爲只有一種方法,因此它易於閱讀和維護。 – Gruntcakes 2012-04-24 22:54:16