|
基础:
一,“多态”在ActionScript中的实现
对应于C++中的虚基类
ActionScript里是 interface
dreamwalker/ITank.as
- package dreamwalker{
- public interface ITank{
- function fire():void;
- function move(step:Number,direction:Number):Boolean;
- //.....其它 Tank类的共有操作
- }
- }
复制代码
dreamwalker/ArmorTank.as
- package dreamwalker{
- class ArmorTank implements ITank{
- public function fire():void{
- trace("ArmorTank :: fire() called....");
- }
- function move(step:Number,direction:Number):Boolean{
- trace("ArmorTank :: move() called....");
- }
- //.....其它 Tank类的共有操作
- }
- }
复制代码
dreamwalker/GeneralTank.as
- package dreamwalk{
- class GeneralTank{
- public function fire():void{
- trace("GeneralTank :: fire() called....");
- }
- function move(step:Number,direction:Number):Boolean{
- trace("GeneralTank :: move() called....");
- }
- //.....其它 Tank类的共有操作
- }
- }
复制代码
dreamwalker/TankFactory.as
package dreamwalker{
public class TankFactory(){
public static function getTank(tankType:String):ITank{
switch(tankType){
case "armor":
return new ArmorTank();
case "general":
return new GeneralTank();
//..........其它类型
}//switch
}//getTank
}
}
=======================================
以上为类文件,下面是测试文件,开发工具 Flash CS3.0
注意红色部分……
这就是AS的多态
=======================================
TestTank.as
package{
import flash.display.Sprite;
import dreamwalker.*;
public class TestTank{
public function TestTank(){
var tank:ITank=TankFactory.getTank("armor");
tank.fire();//显示ArmorTank :: fire() called....
tank=TankFactory.getTank("general");
tank.fire();//显示GeneralTank :: fire() called....
}
}
}
新建一个 Fla文件(actionscript 3.0)
TestTank.fla
在属性处填写 document class 为 TestTank
=====================================
DONE
=====================================
以上共六个文件:
目录结构为:
/dreamwalker/ITank.as
/dreamwalker/GeneralTank.as
/dreamwalker/ArmorTank.as
/dreamwalker/TankFactory.as
/TestTank.as
/TestTank.fla
先写着这么多……(也只学到了这么多 有空学了再上来写……)
不知有没有理解错误的地方……
PS:上面就是工厂模式一个例子
有兴趣知道什么是工厂模式的
可以google一下……
[ 本帖最后由 dreamwalker 于 2007-6-25 20:33 编辑 ] |
|