ActionScript 3 Flash大话设计模式-简单工厂

本文介绍了一个使用ActionScript 3.0实现的设计模式计算器。该计算器通过工厂模式创建不同的操作对象来实现加、减、乘、除等基本运算。

按《大话设计模式》原书程序改写成as3版本如下:

创建一个主类,包含两数字变量,一计算结果函数,运算方法继承自Operation主类

子类:OperationAdd、OperationMul、OperationSub、OperationDiv分别为加、减、乘、除计算方法,重写主类Operation中GetResult方法。

继承中需要有重写函数需要有 override 关键字,访问权限、方法名、参数类型、返回值均不可改变。

//============================================================

Operation.as文档

//============================================================

package {
 import flash.events.EventDispatcher;
 public class Operation{
  private var numA:Number;
  private var numB:Number;
  
  public function GetResult():Number {
   var tmpResult:Number=0;
   return tmpResult;
  }

  public function set NumberA(value:Number):void{
   numA = value;
  }
  public function set NumberB(value:Number):void{
   numB = value;
  }
  public function get NumberA():Number{
   return numA;
  }
  public function get NumberB():Number{
   return numB;
  }
 }
}

 

 

//============================================================

OperationAdd.as文档

//============================================================

package {
 public class OperationAdd extends Operation{
  override public function GetResult():Number {
   var tmpResult:Number=0;
   tmpResult = NumberA+NumberB;
   return tmpResult;
  }
 }
}

//============================================================

OperationSub .as文档

//============================================================

package {
 public class OperationSub extends Operation{
  override public function GetResult():Number {
   var tmpResult:Number=0;
   tmpResult = NumberA-NumberB;
   return tmpResult;
  }
 }
}

 

//============================================================

OperationMul.as文档

//============================================================

package {
 public class OperationMul extends Operation{
  override public function GetResult():Number {
   var tmpResult:Number=0;
   tmpResult = NumberA*NumberB;
   return tmpResult;
  }
 }
}

 

 

//============================================================

OperationDiv.as文档

//============================================================

package {
 public class OperationDiv extends Operation{
  override public function GetResult():Number {
   var tmpResult:Number=0;
   if(NumberB!==0){
    tmpResult = NumberA/NumberB;
   }
   return tmpResult;
  }
 }
}

 

//============================================================

//OperationFactory 为工厂类,根据不同计算方法创建对应计算对象

OperationFactory .as文档

//============================================================

package {
 import Operation;
 public class OperationFactory {
  public static function createOperate(operate:String):Operation {
   var oper:Operation;
   switch (operate) {
    case "+" :
     oper=new OperationAdd  ;
     break;
    case "-" :
     oper=new OperationSub  ;
     break;
    case "*" :
     oper=new OperationMul  ;
     break;
    case "/" :
     oper=new OperationDiv  ;
     break;

   }
   return oper;
  }
 }
}

//============================================================

 

上面是小刚写的,下面是我重新写的,需要源文件在优快云博客http://blog.youkuaiyun.com/liuzhixiaolonglong 给我留言,下面是flash 第一帧代码如下,界面很烂,只为测试:

//============================================================

import flash.text.TextField;
import flash.events.MouseEvent;

//为了定义多个text输入框,用词组储存
var _textArray:Array=new Array();

var oper:Operation=new Operation();

//定义三个文本框,两个输入框,一个显示结果
for(var i:uint=0;i<3;i++){

var _textTmp:TextField=new TextField();

_textTmp.width=100;

_textTmp.height=40;

_textTmp.border=true;

_textTmp.type=TextFieldType.INPUT;

_textTmp.x=100*i;

_textArray.push(_textTmp);

stage.addChild(_textTmp);

 }
 
//定义四个个文本框,+,-,*,/
for(var k:uint=0;k<4;k++){

var _textTmp1:TextField=new TextField();

_textTmp1.mouseEnabled;

_textTmp1.width=20;

_textTmp1.height=20;

_textTmp1.border=true;

_textTmp1.x=300;

_textTmp1.y=20*k;

_textArray.push(_textTmp1);

stage.addChild(_textTmp1);

 }
 
_textArray[0].text="NumberA";

_textArray[1].text="NumberB";

_textArray[2].text="Result";

_textArray[3].text="+";

_textArray[4].text="-";

_textArray[5].text="*";

_textArray[6].text="/";


_textArray[3].addEventListener(MouseEvent.CLICK,textClick);
_textArray[4].addEventListener(MouseEvent.CLICK,textClick);
_textArray[5].addEventListener(MouseEvent.CLICK,textClick);
_textArray[6].addEventListener(MouseEvent.CLICK,textClick);


//点击后执行
function textClick(e:MouseEvent){
 var tmpOperStr:String=e.target.text;
 trace(tmpOperStr);
 oper=OperationFactory.createOperate(tmpOperStr);
 oper.NumberA=Number(_textArray[0].text);
 oper.NumberB=Number(_textArray[1].text);
 _textArray[2].text =String(oper.GetResult());
}

//============================================================

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值