按《大话设计模式》原书程序改写成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());
}
//============================================================
本文介绍了一个使用ActionScript 3.0实现的设计模式计算器。该计算器通过工厂模式创建不同的操作对象来实现加、减、乘、除等基本运算。
370

被折叠的 条评论
为什么被折叠?



