现在的位置: 首页 > 综合 > 正文

AS2与设计模式(一)—简单工厂模式

2013年06月04日 ⁄ 综合 ⁄ 共 1532字 ⁄ 字号 评论关闭

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 

抱歉!评论已关闭.