工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1541|回复: 0

设计模式学习笔记 (ActionScript 3.0学习)

[复制链接]
发表于 2007-6-25 20:07 | 显示全部楼层 |阅读模式
基础:

一,“多态”在ActionScript中的实现


对应于C++中的虚基类
ActionScript里是 interface


dreamwalker/ITank.as
  1. package dreamwalker{
  2.     public interface ITank{
  3.         function fire():void;
  4.         function move(step:Number,direction:Number):Boolean;
  5.         //.....其它 Tank类的共有操作
  6.     }
  7. }
复制代码


dreamwalker/ArmorTank.as
  1. package dreamwalker{
  2.     class ArmorTank implements ITank{
  3.         public function fire():void{
  4.             trace("ArmorTank  :: fire()  called....");
  5.         }
  6.         function move(step:Number,direction:Number):Boolean{
  7.             trace("ArmorTank :: move() called....");
  8.         }
  9.         //.....其它 Tank类的共有操作
  10.     }
  11. }
复制代码



dreamwalker/GeneralTank.as
  1. package dreamwalk{
  2.     class GeneralTank{
  3.         public function fire():void{
  4.             trace("GeneralTank  :: fire()  called....");
  5.         }
  6.         function move(step:Number,direction:Number):Boolean{
  7.             trace("GeneralTank :: move() called....");
  8.         }
  9.         //.....其它 Tank类的共有操作        
  10.     }
  11. }
复制代码



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 编辑 ]
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-8-30 21:12

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表