一、编写ApplicationFacade extends Facade,统一管理事件。


[原]PureMVC理解_初始化[原]PureMVC理解_ico_02代码 package application

{

    import application.controller.StartupCommand;


    import org.puremvc.as3.interfaces.IFacade;

    import org.puremvc.as3.patterns.facade.Facade;


    public class ApplicationFacade extends Facade implements IFacade

    {

        public static const STARTUP:String = "startup";


        public static const START_GAME:String = "start_game";


        //Singleton ApplicationFacade Factory Method


        public static function getInstance():ApplicationFacade

        {

            if ( instance == null ) instance = new ApplicationFacade();

            return instance as ApplicationFacade;

        }


        //Register Commands with the Controller


        override protected function initializeController():void

        {

            super.initializeController();


            registerCommand(ApplicationFacade.STARTUP, StartupCommand);

        }

    }

}



//new ApplicationFacade(); 创建单例实例


二、基类Facade初始化



//创建 model , controller , view 实例

initializeModel(); 

initializeController(); //由ApplicationFacade扩展

initializeView();

1>、//new Model()

2>、//new Controller()

3>、//new View()

// 各接口的方法,关系:

[原]PureMVC理解_ide_03


三、ApplicationFacade.initializeController()流程 //事件注册


1>、Facade.registerCommand();

2>、controller.registerCommand(notificationName:String, commandClassRef:Class);

3>、view.registerObserver(notificationName:String, observer:IObserver);

4>、view.observerMap 赋值 observer // view 保存 observer 引用

5>、controller.commandMap 赋值 commandClassRef:Class // controller 保存 command 引用


四、分析下 自编写的StartupCommand


[原]PureMVC理解_初始化[原]PureMVC理解_ico_02代码

package application.controller

{

    import org.puremvc.as3.patterns.command.MacroCommand;


    public class StartupCommand extends MacroCommand  // 宏命令

    {

        override protected function initializeMacroCommand():void

        {

            addSubCommand(ModelPrepCommand);

            addSubCommand(ViewPrepCommand);

        }

    }

}


五、启动 STARTUP


[原]PureMVC理解_初始化[原]PureMVC理解_ico_02代码 package 

{

    import application.ApplicationFacade;


    import flash.display.Sprite;


    public class Main extends Sprite

    {

        private var facade:ApplicationFacade;


        public function Main()

        {

            facade = ApplicationFacade.getInstance();

            facade.sendNotification(ApplicationFacade.STARTUP, this);

        }

    }

}



步骤:

1>、Facade.sendNotification(notificationName:String, body:Object=null, type:String=null );

2>、Facade.notifyObservers(notification:INotification);

3>、View.notifyObservers(notification:INotification);

4>、observer.notifyObserver( notification:INotification )

5>、controller.executeCommand( notification: INotification ) // 执行 StartupCommand

6>、StartupCommand.execute( notification:INotification )

7>、ModelPrepCommand.execute(); // 注册 Proxy

ViewPrepCommand.execute(); // 注册 Mediator

详细:

ModelPrepCommand 在 Facade 上注册 Proxy

1>、Facade.registerProxy(Proxy);

2>、Model.registerProxy(Proxy);

3>、Model.proxyMap 赋值Proxy // model 保存 proxy 引用

4>、Proxy.onRegister();


// ModelPrepCommand

[原]PureMVC理解_初始化[原]PureMVC理解_ico_02代码 package application.controller

{

    import application.model.DataProxy;

    import application.model.InfoProxy;


    import org.puremvc.as3.interfaces.ICommand;

    import org.puremvc.as3.interfaces.INotification;

    import org.puremvc.as3.patterns.command.SimpleCommand;


    public class ModelPrepCommand extends SimpleCommand implements ICommand

    {

        override public function execute(notification:INotification):void

        {

            facade.registerProxy( new DataProxy() );

            facade.registerProxy( new InfoProxy() );

        }

    }

}


ViewPrepCommand在 Facade 上注册 Mediator

1>、Facade.registerMediator(mediator:IMediator);

2>、View.registerMediator(mediator:IMediator);

3>、View.mediatorMap 赋值 mediator; // view 保存 mediator 引用

4>、View.registerObserver;

5>、mediator.onRegister();


//ViewPrepCommand

[原]PureMVC理解_初始化[原]PureMVC理解_ico_02代码 package application.controller

{

    import application.view.ApplicationMediator;


    import org.puremvc.as3.interfaces.ICommand;

    import org.puremvc.as3.interfaces.INotification;

    import org.puremvc.as3.patterns.command.SimpleCommand;


    public class ViewPrepCommand extends SimpleCommand implements ICommand

    {

        override public function execute(notification:INotification):void

        {

            var main:Main = notification.getBody() as Main;

            facade.registerMediator( new ApplicationMediator(main) );

        }

    }

}