AS2与设计模式(一)---简单工厂模式:
"想出设计模式的人是天才,而学会他的人最多只能算是一个好的工匠"----某个高人
简单工厂模式恐怕是所有设计模式里最好懂的一个了,难怪我这个菜鸟也能写篇文章来介绍它了:
简单工厂模式总体上是这样运作的:
用户通过一个接口参数(整数或String之类)告诉加工者你想要的具体产品,然后加工者就通过
if (argu==0)
return new ConcreteProduct0();
else if(arug==1)
return new ConcreteProduct1();
else if(argu==2)
return new ConcreteProduct2();
....
的方式来制造相关的产品,怎么样?很好懂吧.
下面,我就以我最近做的一个初级物理演示系统来具体说明一下:
这个演标系统中有两个顶层对象,一个是SceneManager,它负责着场景的切换,也就是相当于制造者的地位.
还有一个是指向IEffect接口类的EffectManager对象,随时等候SceneManager的命令,要它当前演示什么效果,
它就演示什么效果,也就是相当于充当着我们的产品的角色.
主场景中用于初始化的代码如下:
import Sdgp.SMag.SceneMag;
import Sdgp.SEffect.*;
fscommand("allowscale",false);
var SceneManager:SceneMag=new SceneMag();
var EffectManager:ISEffect=new CS2BallConserve();//默认状态为二球动理守恒的演示.
SceneManager.init();
EffectManager.init();
//SceneMag类中用以实现简单工厂模式的代码段.
class Sdgp.SMag.SceneMag extends RCSMag
{ ....
private var mComMag:ISComMag;
....
public function changeItem(num:Number):ISEffect
{
if(num==0)return new CS2BallConserve();
else if(num==1)return new CS3BallConserve();
else if(num==2)return new CSMultiBallCol();
else if(num==3)return new CSZMBall();
else
{
trace("unfinished items");
return undefined;
}
}
}
//“制造”这个动作由menuCombo的change事件来激发.
public function msgChange(evt:Object):Void
{ ....
if(evt.target==_root.menuCombo)
{ ...
//一些判定及扫尾工作....
_root.EffectManager=_root.SceneManager.changeItem(_root.menuCombo.selectedIndex);//就是这句用以制造哟~~~
...
_root.EffectManager.init();
_root.fpsCombo.enabled=true;
}
}
怎么样,我讲的还算清楚吧~~~:)
效果演示请点击这里:
http://www.flash8.net/bbs/UploadFile/2005-3/2005326211019860.swf