1、Controller实现了IController接口,提供其中方法的实现。
package org.puremvc.as3.core
{
import org.puremvc.as3.core.*;
import org.puremvc.as3.interfaces.*;
import org.puremvc.as3.patterns.observer.*;
public class Controller implements IController
{
/**
* 作用:构造方法,Controller是一个单例对象,所以不建议直接调用构造方法
* 建议调用它的静态方法getInstance(),为什么不直接定义private级别呢,不解?
* 这里我们看到了上一节讲的存储消息名称-消息处理类对象的commandMap数组
* @throws Error 如果该单例对象已经被创建则在调用构造函数时会出错
*
*/
public function Controller( )
{
if (instance != null) throw Error(SINGLETON_MSG);
instance = this;
commandMap = new Array();
initializeController();
}
/**
* 作用:初始化控制器,说白了是控制器拿到一个view对象,为什么要拿到view对象呢,下面有讲到
* @return void
*/
protected function initializeController( ) : void
{
view = View.getInstance();
}
/**
* 作用:代替构造函数的工厂方法
*
* @return 返回单例的Controller对象
*/
public static function getInstance() : IController
{
if ( instance == null ) instance = new Controller( );
return instance;
}
/**
* 作用:上节稍微提到了,通过给定的消息来执行对应的处理类
*
* @param 消息对象
*/
public function executeCommand( note : INotification ) : void
{
var commandClassRef : Class = commandMap[ note.getName() ];
if ( commandClassRef == null ) return;
var commandInstance : ICommand = new commandClassRef();
commandInstance.execute( note );
}
/**
* 作用:在Controller绑定消息名称和消息处理类,Controller里面保存这些key-value对,并且通过view对象注册”观察者“。
* 由于pureMVC采用观察者模式,在view对象里面存着这一个数组map,
* 这里面的key依旧是notificationName,value却是观察者对象;
*简单提一下观察在模式:类似于一个购物网站的邮件通知,例如我们在拍拍看到一些书,
* 我们用邮箱注册并且收藏了这些书,当这些书的价格变动时我们就都会收到通知。
* 这里的拍拍就相当于这个view,消息就是价格变动,我们就是观察者。
* 我们邮箱注册时这个view就用一个map存这个消息(key)和我们的邮箱(value),
* 当价格变动时,这个view就遍历map查找所有注册过的邮箱给我们发消息。
* @param notificationName 消息名称
* @param commandClassRef 消息处理类
*/
public function registerCommand( notificationName : String, commandClassRef : Class ) : void
{
if ( commandMap[ notificationName ] == null ) {
view.registerObserver( notificationName, new Observer( executeCommand, this ) );
}
commandMap[ notificationName ] = commandClassRef;
}
/**
* 作用:检查是否存在这个消息名称对应的处理类
*
* @param notificationName 消息名称
* @return 布尔值,是否存在这个处理类
*/
public function hasCommand( notificationName:String ) : Boolean
{
return commandMap[ notificationName ] != null;
}
/**
* 作用:移除绑定,并且移除”观察者“,以后拍拍价格变动也不通知你了:)
*
* @param notificationName 消息名称
*/
public function removeCommand( notificationName : String ) : void
{
if ( hasCommand( notificationName ) )
{
view.removeObserver( notificationName, this );
commandMap[ notificationName ] = null;
}
}
protected var view : IView;
protected var commandMap : Array;
protected static var instance : IController;
protected const SINGLETON_MSG : String = "Controller Singleton already constructed!";
}
}
分享到:
相关推荐
pureMVC源码实例(flex的mvc框架)
puremvc-js-multicore-framework-master
puremvc-as3-standard-framework-master puremvc as3最新版
puremvc 讲解puremvc的源码
pureMVC框架 pureMVC源码 学习pureMVC的知识
PureMVC开发框架使用手册,PureMVC包含多个版本,这个文档是Flex版本 的MVC开发框架说明,
pureMVC 源码
说明: 前台--Flex 后台--Java (JPA,Spring) 前台框架--PureMVC Http协议--BlazeDS 做的例子,好东西,欢迎下载 可能很简单,但是内容很全,下一步加入Struts2.0
flex PureMVC框架实例 flex PureMVC框架
puremvc 框架源码及教程, 附带一个使用示例 puremvc 框架源码及教程, 附带一个使用示例
NULL 博文链接:https://wwwflex.iteye.com/blog/841899
flex puremvc例子flex puremvc例子flex puremvc例子flex puremvc例子
PureMVC是一个定位于设计高性能RIA客户端的基于模式的框架。 本文在介绍PureMVC的同时,以在公司总结的实例源码(公司内部培训资料)讲解如何使用PureMVC进行FLEX开发,内涵大量注释,一读即懂
Flex PureMVC页面跳转
puremvc-swift-standard-framework-master_demo
开发环境flash builder 4,sdk:flex4.1,PureMVC 3.2.04,简单的demo,结构清晰,有必要的注释,工程导入flash builder即可。用户名/密码为:admin/admin视为验证通过。
Spring MVC学习(四)-------Controller接口控制器详解1
flex框架 PureMVC_study
Spring MVC学习(四)-------Controller接口控制器详解3
As puremvc 实例,代码是flex4.6平台的,找了很多资料都是以前的代码用不起来,这个是新的,没怎么用自带的组件,初学者可以看看怎么回事。