2011-11-15 79 views
0

我正在開發一個Flash項目,該項目最初有一個簡單的動畫模板,但已經發展爲具有多個模板(不受我控制)的不同「狀態」何時使用狀態模式?

因此,我的更新(ENTER_FRAME)循環現在開始看起來有點像這樣:

private function update():void { 
    switch (state) { 

    case "intro": 
     switch(layoutState) { 
      case "large-images": 
       // do one animation 
      break; 

      case "thumbnails": 
       // do another animation 
      break; 

      case "text-on-top": 
       // do another animation 
      break; 
     } 
    break; 

    case "main": 
     switch(layoutState) { 
      case "large-images": 
       // do another animation 
      break; 

      case "thumbnails": 
       // do another animation 
      break; 

      case "text-on-top": 
       // do another animation 
      break; 
     } 

    break; 

    case "outro": 
     switch(layoutState) { 
      case "large-images": 

      break; 

      case "thumbnails": 

      break; 

      case "text-on-top": 

      break; 
     } 

    break; 
} 

switch(backgroundState) { 
    case "black": 
     // do something 
    break; 

    case "white": 
     // do something else 
    break; 
} 

}

我的初始化方法開始看起來像:

private function initalizeDescription() { 
     description = new Description(); 
     switch(layoutState) { 
       case "large-images": 
        // do something to description here 
       break; 

       case "thumbnails": 
        // do something else to description here 
        if (backgroundState == "black") { 
         // do one thing 
        } 
        if (backgroundState == "white") { 
         // do another thing 
        } 
       break; 

       case "text-on-top": 
        // do something else to description here 
       break; 
      } 
    } 

我對僞代碼表示歉意,但真正的代碼非常冗長。

這是一種情況,它會更好地使用狀態模式,如果有的話,任何人都可以提供一個(短)代碼示例如何最好地實現這一點?

回答

1

你打賭這是使用狀態模式的好機會!每當我不得不啓動嵌套開關語句時,我都會使用它,最值得注意的是"ActionScript 3.0 Design Patterns" (O'Reilly)中推薦的實現。

(對不起,我找不到可以連接的章節的免費版本,但我認爲這本書非常值得花錢。)