- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*" creationComplete="designpatterns()">
- <mx:Script>
- <![CDATA[
- import flash.display.Sprite;
- import designpatterns.strategy.*;
- public function designpatterns():void
- {
- var context:Context=new Context();
- //设置策略
- context.strategy=new ConcreteStrategyA()
- context.ContextInterface()
- //runtime 更改策略B
- context.strategy=new ConcreteStrategyB()
- context.ContextInterface()
- //runtime 更改策略C
- context.strategy=new ConcreteStrategyC()
- context.ContextInterface()
- }
- ]]>
- </mx:Script>
- </mx:Application>
Context.as
*set方法里一定要有参数。
- package designpatterns.strategy
- {
- public class Context
- {
- private var _strategy:IStrategy
- public function set strategy(p_strategy:IStrategy):void{
- this._strategy=p_strategy;
- }
- public function ContextInterface():void{
- this._strategy.AlgorithmInterface()
- }
- }
- }
IStrategy.as
*注:接口实现这一接口的类都是这个接口的数据类型,说以可以声明一个接口来等于一个实现他这个接口的类的实例。
- package designpatterns.strategy
- {
- public interface IStrategy
- {
- function AlgorithmInterface():void
- }
- }
ConcreteStrategyA.as
- package designpatterns.strategy
- {
- public class ConcreteStrategyA implements IStrategy
- {
- public function AlgorithmInterface():void
- {
- trace("调用策略A")
- }
- }
- }
ConcreteStrategyB.as
- package designpatterns.strategy
- {
- public class ConcreteStrategyB implements IStrategy
- {
- public function AlgorithmInterface():void
- {
- trace("调用策略B")
- }
- }
- }