一.介绍

PureMVC是基于MVC思想建立的一个轻量级的应用框架,这套框架有多种语言的版本

ActionScript 2
ActionScript 3
C++
C#
ColdFusion
Dart
Haxe
Java
JavaScript
Objective C
Perl
PHP
Python
Ruby
TypeScript

且大多数语言都支持两个版本的框架,一个是标准版,不支持多模块,另一个是multicore版,支持多模块。

从https://github.com/PureMVC我们可以得到这些框架,和一些应用框架的demo。

二.Model,View,Controller和Facade

Model,View,Controller和Facade都使用单例模式,Modal主要通过维护proxyMap来提供对各种数据的访问。View主要通过维护MediatorMap来提供对视图的操作,通过维护observerMap使得视图响应各种事件。Controller通过维护commandMap来处理各种事件。

而Facade为Model、View和Controller提供一致对外的界面,定义了一组高层接口,这使得子系统更容易使用。引入Facade后,外部调用子系统只需要通过Facade就可以了,在Facade里面封装对Model、View和Controller的调用。在我们利用PureMVC框架时,最佳实践是一般不用去继承Model、View和Controller定义子类来获得对数据,事件的支持,而是通过定义一系列的Proxy,Mediator和Command来定义数据,处理事件,并通过定义Facade的子类来将这一系列的Proxy,Mediator和Command引入系统中。一般Facade的子类定义如下:

    public class ApplicationFacade extends Facade implements IFacade{public static const STARTUP:String          = "startup";public static function getInstance() : ApplicationFacade {if ( instance == null ) instance = new ApplicationFacade( );return instance as ApplicationFacade;}override protected function initializeController( ) : void{super.initializeController();            registerCommand( STARTUP, StartupCommand );}public function startup( stage:Object ):void{sendNotification( STARTUP, stage );}  }

1.定义了ApplicationFacade子类后,就可以通过ApplicationFacade.getInstance().startup( this.stage )来启动系统了。

2.可以通过override方法initializeModel和initializeView方法来引入Proxy和Mediator,但在实践中我们通常是在StartupCommand中进行相关操作。且除了必须要在启动的时候注册的Command比如StartupCommand外,其他的Command最好都不要在这里注册。

三.Proxy, Command,Mediator和Notifier

Notifier是一个引用了facade对象的子类,且封装了facade对象的sendNotification方法。而Proxy, Command和Mediator都继承自Notifier,这使得这两个类都能够发送消息,以使用PureMVC的消息系统。且能够使用facade对象的接口来调用一些方法,比如注册和获取Proxy数据源,注册Mediator中介等。

四.Proxy和Modal

每个Proxy子类都封装了对一种数据的操作,多个子类则封装了多种数据。Modal主要通过维护proxyMap来注册和获取数据源,而Facade也提供了对proxyMap进行操作的接口。Command和Mediator也能随时通过facade来注册或获取需要的数据源。在一个系统中,同一个名称的Proxy只能有一个实例对象。

PureMVC的这一设计,使得数据源可以轻松的被获取,操作,此外,Proxy本身也继承了Notifier的sendNotification方法,当Proxy数据更改时能够通知相关视图,使多个视图能够共用同一数据源。

在实现Proxy时应该注意,Proxy和视图的通信应该仅通过sendNotification方法,Proxy不需要知道视图的状态,不应该对视图产生依赖。

五.Mediator,Observer和View

Mediator是系统和视图之间的中介。View主要通过维护MediatorMap和ObserverMap来支持系统和视图之间的通信。其中ObserverMap保存了一个Notifiction消息和Observer数组之间的对应关系,这是利用观察者模式来实现的消息系统。而MediatorMap则保存了系统中所有的Mediator,当每个Mediator被加入系统中时,系统都会通过listNotificationInterests方法查看该Mediator关注哪些消息,并将Mediator加入相应的观察者中,将其handleNotification方法注册为其关注的消息的处理函数。

在实现Mediator时,主要注意的就是需要重写listNotificationInterests和handleNotification方法,且提供对视图事件的EventListerner。

六.Command和Cotroller

Command主要负责Proxy和Mediator之间的交互,Controller通过commandMap来保存Notification和command之间的关系,在registerCommand的同时,会将Controller加入对应Notifiction消息的观察者中,并使用Command来处理消息。

Command分为SingleCommand和MacroCommand。MacroCommand让你可以顺序执行多个Command。每个执行都会创建一个Command对象并传参一个对源Notification的引用。

MacroCommand在构造方法调用自身的initializeMacroCommand方法。实际应用中,你需重写这个方法,调用addSubCommand添加子Command。你可以任意组合SimpleCommand和MacroCommand成为一个新的Command。

转载于:https://www.cnblogs.com/studynote/archive/2013/06/12/3132194.html

PureMVC框架应用简述相关推荐

  1. 什么是 PureMVC 框架(提供下载)

    PureMVC是在基础的经典模型.视图和控制器上建立的一个轻量级的应用框架,这种开源框架是免费的,它最初是执行的ActionScript 3语言使用的Adobe Flex.Flash和AIR,现在已经 ...

  2. [Unity]PureMVC框架解读(上)

    PureMVC框架解读 简易UI框架 1.UI框架核心方法 BaseUI会记录UI的名字(枚举)和Controller用来将UI与具体操作方法解耦 UIManger利用字典记录所有的UI组件,然后提供 ...

  3. 解读PureMVC框架

    作者:吴秦 出处:http://www.cnblogs.com/skynet/ 本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名吴秦(包含链接). 参考 ...

  4. LAS语音识别框架发展简述

    LAS识别框架发展简述 LAS模型 模型综述 Listener部分 attend-spell learning decoding and rescoring LAS模型的缺点即改进方法 缺点 改进方法 ...

  5. TestNG框架自动化简述

    TestNG框架自动化简述 在做页面自动化测试的时候,有很多语言和框架可以选择,如语言有java,python,php,而框架有各种unittest框架,TestNG框架等等.先前我们介绍过WebDr ...

  6. PureMVC框架的学习笔记

    曾经自己做的项目UI层使用简单的UI框架,发现扩展性不强,大型项目多人协同也是个问题,于是学习了比较经典的基于MVC的PureMVC以及基于MVVM的LoxodonFramework,今天记录一下有关 ...

  7. Unity PureMVC框架案例

    引言 PureMVC框架解读上:https://blog.csdn.net/qq_29579137/article/details/73692842 PureMVC框架解读下:https://blog ...

  8. QT 版puremvc框架

    PDMvcFramework MVC介绍 MVC框架 将应用程序分为Model.View.Controller三个大模块,Model主要负责应用程序的数据持有,View模块负责业务UI展示,Contr ...

  9. Unity实战(3):pureMVC框架应用

    目录 前言 一.下载框架并编译生成dll文件 二.Unity搭建基本要素 三.pureMVC简要说明 四.pureMVC脚本编写 4.1 MyData脚本 4.2 MyDataProxy脚本 4.3 ...

最新文章

  1. 第一个MapReduce程序
  2. 在Linux上分析硬件检测日志
  3. Linux 的启动流程
  4. mongoDB-3.x启用认证
  5. 李名洋(1983-),男,中国电信股份有限公司云计算分公司数据分析师。
  6. python画柱形图把奇数年份也显示出来_python - Matplotlib奇数子图 - 堆栈内存溢出...
  7. Extjs store用法详解
  8. java扫码盒_[腾讯 TMQ] JAVA 代码覆盖率工具 JaCoCo-实践篇
  9. 系统调用服务号 linux 2.6.32
  10. jsdroid 教程_服装制版教程如何利用紧身胸衣来制作无袖服装417才智服装
  11. Ae/Pr数字转胶片调色插件 FilmConvert Pro for Mac v2.40破解版
  12. 解决eNSP“错误代码40”及AR设备启动失败问题
  13. 蜗牛学院:中国人,努力获得了荣誉却要压抑克制
  14. PS进阶篇——如何PS软件给衣服换个颜色或图案风格(七)
  15. VirtualBox虚拟电脑控制台错误,不能为虚拟电脑打开一个新任务
  16. 自定义导航栏 UINavigationBar
  17. Python-Python与数据库
  18. 详解数据仓库建设体系
  19. 操作系统课程设计--模拟时间片轮转法
  20. 使用ARIMA进行股票预测

热门文章

  1. git branch命令解析
  2. conda create出现连接问题_处理conda安装工具的动态库缺失问题
  3. 面经—CV秋招40万+offer上岸经验:分享100道CV最新面试题
  4. Win10打补丁KB4022725出现0x80073712错误
  5. C# 读取CSV文件
  6. 空间切割(java代码实现)
  7. 同步Socket 与 异步 Socket
  8. golang map的遍历
  9. vs2022创建窗口应用程序
  10. Android 6.0 指纹识别功能学习(一)----阿冬专栏!!!