ActionScript 3 Flash大话设计模式-策略模式

本文介绍如何使用策略模式实现一个灵活的收费系统。通过Flash编程,演示了正常收费、打折和返现三种策略,并利用工厂模式创建相应的策略实例。文章详细展示了代码实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

非常艰难地看到第二个模式,书上的东西总是耐人寻味,你反复地看才会有点感觉,而且实践很重要!小弟不才,半解半懂,就急着去写代码,可能部分不是很合理,如果你发现了,请到优快云博客给我留言。

策略模式我个人感觉可能还是没有工厂模式比较经典,体现了面向对象的封装,继承及多态。而它的特点就是为了实现不同的策略而使用不用的方法,使用工厂模式生成对象。

文件包括父类:CashSuper.as,子类正常收费:CashNormal.as;打折:CashRebate.as;返现:CashReturn.as三种方式,还有一个就是收费工厂类:CashFactory.as。

有四个文本框,一个下拉框,两个按钮,flash第一帧代码如下:

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

import flash.events.MouseEvent;
import fl.controls.ComboBox;
import flash.events.Event;

//单价
var _textPrice:Number;

//数量
var _textNum:Number;

//总计
var _textSum:Number;

//用一个字符串保存计算方式
var _method:String="正常收费";

//定义收费
var _sum:CashSuper;

//用一个数组存储下拉框选项
var myIstem:Array=new Array();

 


//下拉框的几个选项
for(var i:uint=0;i<3;i++){

var istem:Object=new Object();

myIstem.push(istem);

myCombox.addItem(istem);

}

//下面是具体的下拉框内容
myIstem[0].label="正常收费";

myIstem[0].data="正常收费";

myIstem[1].label="满300返100";

myIstem[1].data="满300返100";

myIstem[2].label="打8折";

myIstem[2].data="打8折";

 


//我要用到现金工厂来实现计算收取的钱,算是初始化吧,正常收费
_sum=CashFactory.createCashAccept(_method);

//确认按钮添加监听事件
btnConfirm.addEventListener(MouseEvent.CLICK,confirm);

//重置按钮添加重置事件
btnReset.addEventListener(MouseEvent.CLICK,reset);

//确认按钮的事件
function confirm(e:MouseEvent):void{

_textPrice=Number(textPrice.text);

_textNum=Number(textNum.text);


//用计算总数
_textSum=_sum.acceptCash(_textPrice*_textNum);

textSum.text=String(_textSum);

textDetail.text="单价是:"+_textPrice+"  数量是:"+_textNum+"  "+_method+"  总计为:"+_textSum;

}

//重置的按钮的事件
function reset(e:MouseEvent):void{
 
textPrice.text="0";

textNum.text="0";

textSum.text="0";

textDetail.text="";

}


myCombox.addEventListener(Event.CHANGE,CashType);

//哪一种收费方式
function CashType(e:Event):void{

_method=myCombox.selectedItem.data;

_sum=CashFactory.createCashAccept(_method);

}

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

package  {
 
 public class CashSuper {

 public function acceptCash(money:Number):Number{
  
 var tmpResult:Number=0;
 
    return tmpResult;
  
  }

 }
 
}

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

 

package  {
 
 public class CashNormal extends CashSuper {

  override public function acceptCash(money:Number):Number {
       
  var tmpResult:Number=money;
  
        return tmpResult;
  }

 }
 
}

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

package  {
 
 public class CashRebate extends CashSuper {
  
  private var moneyRebate:Number;
  
  public function CashRebate(moneyRebate:Number){
  
  //初始化
  this.moneyRebate=moneyRebate;
  
  }

  override public function acceptCash(money:Number):Number {
       
  var tmpResult:Number=money*moneyRebate;
  
        return tmpResult;
  }

 }
 
}

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

package  {
 
 public class CashReturn extends CashSuper {
  
  private var moneyCondition:Number;
  
  private var moneyReturn:Number;

  public function CashReturn(moneyCondition:Number,moneyReturn:Number) {
  
  //初始化
  this.moneyCondition=moneyCondition;
  
  this.moneyReturn=moneyReturn;
  
  }
  
  //重新定义收钱函数
  override public function acceptCash(money:Number):Number {
       
  var tmpResult:Number=money;
  
  if(money>=moneyCondition){
   
  //满多少就返还
  tmpResult=tmpResult-moneyReturn;
   
   }
  
        return tmpResult;
  }

 }
 
}

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

package  {
 
 public class CashFactory {

  public static function createCashAccept(type:String):CashSuper{
  
  var cs:CashSuper;
  
  switch(type){
   
    case "正常收费" :
             cs=new CashNormal;
             break;
   
             case "满300返100" :
             cs=new CashReturn(300,100);
             break;
   
             case "打8折" :
             cs=new CashRebate(0.8);
             break;
   
   }
   
  return cs;
  
  }

 }
 
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值