我正在开发一个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;
}
}
我为伪代码道歉,但真正的代码非常冗长。
这是一种使用状态模式会更好的情况吗?如果是这样的话,任何人都可以提供一个(短)代码示例来说明如何最好地实现它?
答案 0 :(得分:1)
你敢打赌这是一个使用状态模式的绝佳机会!每当我不得不开始嵌套switch语句时,我就会使用它,最值得注意的是"ActionScript 3.0 Design Patterns" (O'Reilly)中推荐的实现。
(对不起,我找不到可以自由访问的章节链接,但我认为这本书非常物有所值。)