puremvc 笔记

原文链接

核心层(单例):

Model:保存对Proxy对象的引用,Proxy负责操作数据类型。

View:保存对Mediator对象的引用,Mediator负责操作具体的视图组件。

Controller:保存所有Command的映射,Command只在需要时才被创建。

层通信:

层与层之间的通信是通过Observer/Notification 机制来实现的,你只需要使用一个非常简单的方法从 Proxy,Mediator, Command 和 Facade 发送 Notification。

Facade(单例,只发送不接受Notification):

1.提供与核心层通信的唯一接口,负责初始化核心层(Model,View 和Controller),并能访问它们的 Public 方法。Proxy、Mediator 和 Command 就可以通过创建的 Facade 类来相互访问通信。

2.Facade 保存了 Command 与 Notification 之间的映射。当 Notification(通知)被发出时,对应的 Command(命令)就会自动地由 Controller 执行。

3.Facade 类对象负责初始化 Controller(控制器),建立 Command 与 Notification 名之间的映射,并执行一个 Command 注册所有的 Model 和 View。

Mediator(可以发送和接受Notification):

1.在 Mediator 实例化时,Mediator 的 listNotifications 方法会被调用,以数组形式返回该
Mediator 对象所关心的所有 Notification。之后,当系统其它角色发出同名的
Notification(通知)时,关心这个通知的Mediator 都会调用 handleNotification 方法并将
Notification 以参数传递到方法。

2.因为 Mediator 也会经常和 Proxy 交互,所以经常在 Mediator 的构造方法中取得Proxy 实例的引用并保存在 Mediator 的属性中,这样避免频繁的获取 Proxy 实例。

Proxy(只发送不接受Notification):

1.在很多场合下 Proxy 需要发送 Notification(通知),比如:Proxy 从远程服务接收到数据时,发送 Notification 告诉系统;或当 Proxy 的数据被更新时,发送 Notification 告诉系统。

Command(可以发送和接受Notification):

1.Controller 会注册侦听每一个 Notification,当被通知到时,Controller 会实例化一个该 Notification 对应的 Command 类的对象。最后,将 Notification 作为参数传递给execute 方法。

2.Command 对象是无状态的;只有在需要的时候( Controller
收到相应的Notification)才会被创建,并且在被执行(调用 execute
方法)之后就会被删除。所以不要在那些生命周期长的对象(long-living object)里引用 Command 对象。

3.通过发送 Notification 通知 Controller 来执行 Command,而且只能由Controller 实例化并执行 Command。

在puremvc中有两种Command:

1.SimpleCommand 只有一个 execute 方法,execute 方法接受一个Inotification 实例做为参数。实际应用中,你只需要重写这个方法就行了。

2.MacroCommand 让你可以顺序执行多个 Command。每个执行都会创建一个 Command 对象并传参一个对源
Notification 的引用。MacroCommand 在构造方法调用自身的 initializeMacroCommand
方法。实际应用中,你需重写这个方法,调用 addSubCommand 添加子 Command。你可以任意组合 SimpleCommand 和
MacroCommand 成为一个新的 Command。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

源码分析:

接口:

INotifier:发送信息

INotification:信息体

具体类:

Command:

类型:1.SimpleCommand:单条命令   2.MacroCommand:多条命令

重要方法:

1.public virtual void Execute(INotification notification)

Mediator:

重要方法:

1.ListNotificationInterests 返回view组件感兴趣的通知

2.HandleNotification 处理通知

Proxy:

重要方法:

1.public virtual void OnRegister() 当proxy被注册时调用

2.public virtual void OnRemove() 当proxy被移出时调用

Facade:

1.public virtual void RegisterCommand(string notificationName, Type commandType)

注册命令,当通知发送时,对应命令的Execute方法就会执行

2.public virtual void RegisterMediator(IMediator mediator)

注册中介,并获取中介的ListNotificationInterests,当这些通知发送时,中介的HandleNotification就会执行

3.public virtual void RegisterProxy(IProxy proxy)

注册代理,并调用代理的OnRegister方法

4.SendNotification

发送通知

时间: 2024-10-30 02:29:40

puremvc 笔记的相关文章

PureMvc学习笔记

PureMvc学习笔记: Mediator ->对应View层,内部绑定View对象,由 Mediator 对象来操作具体的视图组件.(它的作用还包括:添加事件监听器,发送或接收 Notification,直接改变视图组件的状态.通过这样,就可以把视图和控制它的逻辑分离开来.) if (notification.getName().equals(CMDConstants.NOTI_LOGIN_FAILED)) { System.out.println("view更新,登陆失败")

C# PureMVC 学习笔记

参考:http://www.cnblogs.com/skynet/category/441705.html  http://www.jianshu.com/p/904b36ad37e2 PureMVC GameObject : 基本上是最底层,除了Unity自身的组件外,不依赖PureMVC任何类. Mediator : 只依赖GameObject,与GameObject一对一绑定,GameObject的输入通过事件(event)传递到Mediator调用. Command :  最底层,通过消

【安全牛学习笔记】

弱点扫描 ╋━━━━━━━━━━━━━━━━━━━━╋ ┃发现弱点                                ┃ ┃发现漏洞                                ┃ ┃  基于端口五福扫描结果版本信息(速度慢)┃ ┃  搜索已公开的漏洞数据库(数量大)      ┃ ┃  使用弱点扫描器实现漏洞管理            ┃ ╋━━━━━━━━━━━━━━━━━━━━╋ [email protected]:~# searchsploit Usage:

51CTO持续更新《通哥的运维笔记》

<通哥的运维笔记>将持续在51CTO网站更新,希望大家多多关注.互相学习,后期,我将会退出<通哥的运维笔记>系列视频教程,希望带给大家最大的收获,帮助大家更好的学习.进步.<通哥的运维笔记>主要从linux系统管理.虚拟化.cloudstack云平台以及网络管理之CCNA.CCNP.CCIE,等等方面深入讲解.

WPF笔记整理 - Bitmap和BitmapImage

项目中有图片处理的逻辑,因此要用到Bitmap.而WPF加载的一般都是BitmapImage.这里就需要将BitmapImage转成Bitmap 1. 图片的路径要用这样的,假设图片在project下的Images目录,文件名XXImage.png. pack://application:,,,/xxx;component/Images/XXImage.png 2. 代码: Bitmap bmp = null; var image = new BitmapImage(new Uri(this.X

java String 类 基础笔记

字符串是一个特殊的对象. 字符串一旦初始化就不可以被改变. String s = "abc";//存放于字符串常量池,产生1个对象 String s1=new String("abc");//堆内存中new创建了一个String对象,产生2个对象 String类中的equals比较字符串中的内容. 常用方法: 一:获取 1.获取字符串中字符的个数(长度):length();方法. 2.根据位置获取字符:charAt(int index); 3.根据字符获取在字符串中

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

学习笔记之邮件发送篇

用脚本语言发送邮件是系统管理员必备技能 对系统定期检查或者当服务器受到攻击时生成文档和报表. 发布这些文档最快速有效的方法就是发送邮件. python中email模块使得处理邮件变得比较简单 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍: 本段摘录于    http://www.cnblogs.com/xiaowuyi/archive/2012/03/17/2404015.html 1.smtplib模块 smtplib.SMTP([host[, p

15.1-全栈Java笔记:Java事件模型是什么?事件控制的过程有哪几步??

应用前边两节上一章节的内容,大家可以完成一个简单的界面,但是没有任何的功能,界面完全是静态的,如果要实现具体功能的话,必须要学习事件模型. 事件模型简介及常见事件模型 对于采用了图形用户界面的程序来说,事件控制是非常重要的. 一个源(事件源)产生一个事件并把它(事件对象)送到一个或多个监听器那里,监听器只是简单地等待,直到它收到一个事件,一旦事件被接收,监听器将处理这些事件. 一个事件源必须注册监听器以便监听器可以接收关于一个特定事件的通知. 每种类型的事件都有其自己的注册方法,一般形式为: v