本节将讲述Facade,Proxy、Mediator、Command的统一管家。自定义Facade必须继承Facade,在本示例中自定义Facade名称为ApplicationFacade,这个名称也是pureMVC组织建议的名称。先看代码:javascript
- package com.superwulei {
- import com.superwulei.controller.StartupCommand;
-
- import org.puremvc.as3.patterns.facade.Facade;
-
- public class ApplicationFacade extends Facade {
- public static const STARTUP:String = "startup";
- public static const USER_ADD:String = "user_added";
- public static const USER_DELETE:String = "user_delete";
-
- public static function getInstance():ApplicationFacade {
- if (instance == null)
- instance = new ApplicationFacade();
- return instance as ApplicationFacade;
- }
-
- public function startup(app:Object):void {
- sendNotification(STARTUP, app);
- }
-
- override protected function initializeController():void {
- super.initializeController();
- registerCommand(STARTUP, StartupCommand);
- }
- }
- }
ApplicationFacade中使用了单例模式,即整个应用程序中只会存在一个ApplicationFacade的对象。不清楚单例模式的朋友们能够经过静态方法getInstance中的代码思考一下,是否是这样。方法initializeController被重写,首先调用父类的initializeController方法,而后注册StartupCommand命令。还记得在上一章《pureMVC简单示例及其原理讲解——Controller 》中提到的StartupCommand么?它是一个复合命令,在这里注册了这个命令,其余的包括全部的Proxy、Mediator和AddUserCommand、DeleteUserCommand也会被同时注册。看一个startup方法,有一个Object类型的参数app,app接受的将是程序运行的类,没有它程序能够被加载但没法执行任何操做(这个方法具体细节本人有待研究,也欢迎广大朋友告之)。java
主程序启动文件MyPureMVCdemo.mxml 代码mvc
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:components="com.superwulei.view.components.*"
- creationComplete="facade.startup(this);">
- <mx:Script>
- <![CDATA[
- import com.superwulei.ApplicationFacade;
- private var facade:ApplicationFacade = ApplicationFacade.getInstance();
- ]]>
- </mx:Script>
-
- <components:UserForm id="userForm" />
- <components:UserList id="userList" />
- </mx:Application>
干净多了吧?在应用程序的creationComplete事件中加入facade.startup(this)的调用,其中this就表示的是当前启动类。这样一切就会经过facade走了。为方便各位更好的理解本文,本人已经将本示例上传,请点击下方的超级连接下载。app
这样结束彷佛很不圆满,我想在听到一些反馈以后在作小结,这样能够画上一个比较美的句号。ide
本人对于pureMVC的研究仅限于此,恳请各位pureMVC的研究者和使用者批评、指导!this
这里是DEMO的下载地址spa