Command 命令 行为模式

   Command 命令 行为模式,将一个请求封装为一个对象,从而你可以用不同的请求对客户端进行参数化、对请求排队或记录请求日志,以及支持Redo,Undo操作。

 

   PureMVC的Controller 就是用Command模式实现的,Command模式有一下5个元素

   1、命令接口

   2、具体命令

   3、接受者

   4、客户

   5、调用者

 

 



 命令接口是命令模式的重要组成部分,它允许鞠勇不同实现的所有命令都使用统一的接口,也就是,命令的调用者不知道命令的具体实现,就像我们开灯或关灯,但是我们并不知道灯的打开和关闭具体是如何实现的 。

 

以下的例子摘自《Actionscrption 3 设计模式》

 

 最简单的命令接口通常是一个excute()方法,用于运行被请求的操作,代码如下:

 

 

ICommand.as

package {
	public interface ICommand {
		function excute():void;
	}
}
 

   这时我们需要定义支持撤销的命令和重做的命令,代码如下:

 

 

IUndoableCommand .as

package {
	public interface IUndoableCommand extends ICommand {
		function undo();
	}
}

 

 

IRedoableCommand .as

package {
	public interface IRedoableCommand extends ICommand {
		function redo();
	}
}

 

    通常具体的命令需要一个接受者,就是要对他操作的对象,PureMVC的Command要传进一个Notification,通过facade.reciveMediator()来取得一个操作对象。这里我们就在具体构造函数里,传进一个参数来作为操作对象。

 

RotateColckwiseCommand.as

package {
	import flash.display.*;
	public class RotateColckwiseCommand implements ICommand {
		private var receiver:DisplayObject;
		public function RotateColckwiseCommand(receiver:DisplayObject) {
			this.receiver = receiver;
		}
		
		public function execute():void {
			receiver.rotation += 20;
		}
	}
}
 

   当然也可反向旋转的命令

 

 

 

RotateCounterColckwiseCommand.as

package {
	import flash.display.*;
	public class RotateCounterColckwiseCommand  implements ICommand {
		private var receiver:DisplayObject;
		public function RotateCounterColckwiseCommand (receiver:DisplayObject) {
			this.receiver = receiver;
		}
		
		public function execute():void {
			receiver.rotation -= 20;
		}
	}
}

 

   现在来创建一个放大对象的命令

 

 

ScaleUpCommand.as

package {
	import flash.display.*;
	public class ScaleUpCommand  implements ICommand {
		private var receiver:DisplayObject;
		public function ScaleUpCommand (receiver:DisplayObject) {
			this.receiver = receiver;
		}
		
		public function execute():void {
			receiver.scaleX += 0.1;
			receiver.scaleY += 0.1;
		}
	}
}

    还有个缩小对象的命令:

 

 

ScaleDownCommand .as

package {
	import flash.display.*;
	public class ScaleDownCommand  implements ICommand {
		private var receiver:DisplayObject;
		public function ScaleDownCommand (receiver:DisplayObject) {
			this.receiver = receiver;
		}
		
		public function execute():void {
			receiver.scaleX -= 0.1;
			receiver.scaleY -= 0.1;
		}
	}
}
 

 

 ............................................

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值