在游戏开发中,对于一般网络游戏,由于需要多人协同开发,每个人负责不同的模块开发,为了减少耦合,需要用来一些MVC框架,减少模块之间的耦合。我们现在使用的mvc框架是pureMVC。pureMVC的官网:http://www.puremvc.org

 
pureMVC是一个轻型的、基于观察者模式设计的MVC框架。
我们首先从Git上面把pureMVC下载下来,可以看到如下目录: 
 

pureMVC是开源框架,在src目录下,我们可以看到这款框架的源代码。
下面,简单说一下这个mvc框架:
 

pureMVC框架的目标很明确,即把程序分为低耦合的三层:Model、View和Controller。

在PureMVC实现的经典MVC设计模式中,这三部分由三个单例模式类管理,分别是Model、View和Controller,三者合称为核心层或核心角色。
PureMVC中还有另外一个单例模式类-Facade,Facade提供了与核心层(即Model,View和Controller)通信的唯一接口,以简化开发复杂度。

 

Model与Proxy
Model保存了对Proxy对象的引用,Proxy负责操作数据模型,与服务器端进行通信存取数据

 

View与Mediator
View保存了对Mediator对象的引用。由Mediator对象来操作具体的视图组件(View Component),包括:添加事件监听器,发送或接收Notification,直接改变视图组件(View Component)的状态。

这样做实现了把视图和控制它的逻辑分离开来。
 

Controller与Command
Controller保存所有Command的映射。Command类是无状态的,只在需要时才被创建。

 

Facede与Core
Facade类应用单例模式,它负责初始化核心层(Model\View\Controller),并能访问他们的Public方法。

 

在实际的应用中,你只需要继承Facade类创建一个具体的Facade类就可以实现整个MVC模式,并不需要在代码中导入编写Model\View\Controller类。

 

Proxy\Mediator\Command就可以通过创建的Facade类来相互访问通信。

 

Notification可以被用来触发Command的执行
Facade保存了Command与Notification之间的映射。当Notification被发出时,对应的Command就会自动地由Controller执行。

 

Mediator发送、声明、接收Notification
当用View注册Mediator时,Mediator的listNotifications方法会被调用,以数组形式返回该Mediator对象所关心的所有Notification之后,当系统其它角色发出同名的Notification时,关心这个Notification的Mediator都会调用handleNotification方法将Notification以参数传递到方法。

 

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

 

Facade
MVC设计模式的核心元素在PureMVC中体现为Model类、View类和Controller类。为了简化程序开发,PureMVC应用了Facade模式。
Facade是Model\View\Controller三者的"经纪人"。实际编写代码时你并不用导入这三者的类文件,也不用直接使用它们。Facade类已经在构造方法中包含了对核心MVC三者单例的构造。

一般地,实际的应用程序都有一个Facade子类,这个Facade类对象负责初始化Controller,建立Command与Notification之间的映射,并执行一个Command注册所有的Model和View。
 

Command
Command对象是无状态的;只有在需要的时候(Controller收到相应的Notification)才会被创建,并且被执行(调用execute方法)之后就会不给删除。
SimpleCommand只有一个execute方法,execute方法接收一个nofitication实例作为参数,实际应用中,你只需要重写这个方法就行。
MacroCommand让你可以顺序执行多个Command,每个执行都会创建一个Command对象并传参一个队源Notification的引用。

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

上面只是关于PureMVC的一些综述性知识点。如果想深入学习可以仔细研读官方的《pureMVC最佳实践》:http://puremvc.org/component/option,com_wrapper/Itemid,183/
 
其中关于pureMVC设计模式的讨论也有几篇博客值得研读:
4、PureMVC(AS3)剖析:设计模式(一):http://www.cnblogs.com/skynet/archive/2013/03/14/2958644.html 
5、PureMVC(AS3)剖析:设计模式(二):http://www.cnblogs.com/skynet/archive/2013/03/25/2980662.html 
  
 

基于HTML5的SLG游戏开发( 三):认识PureMVC的更多相关文章

  1. 基于HTML5的SLG游戏开发(序)

          2012年前后,HTML5游戏凭借跨平台.易移植.部署简单.节省成本等优点被炒的火热,经过一两年的快速发展,市场出现了一些成功地HTML5游戏产品,像磊友的<修仙三国>,神奇时 ...

  2. 基于HTML5的SLG游戏开发(一):搭建开发环境(2)

          游戏开发过程中经常需要处理各种事件,而HTML5游戏开发中,所有的场景和UI面板都是绘制在Canvas上面,假设需要对某一UI面板上的关闭按钮添加事件监听,采取的方法是对关闭按钮图片资源进 ...

  3. 基于HTML5的SLG游戏开发( 二):创建HTML5页面

    HTML5游戏的开发过程中是在浏览器上进行运行调试的,所以首先我们需要建立一个html页面. 其中,我们把所有的canvas都放到一个viewporter(视图)里面,因此,在body中放置了一个id ...

  4. 基于HTML5的SLG游戏开发(一):搭建开发环境(1)

    开发环境: 1.操作系统:MacOS 10.8.5 2.本地web服务器:Apache 2.2.24 (Window环境推荐使用WampServer) 3.编码工具:WebStrom 7.0 4.调试 ...

  5. 转: Orz是一个基于Ogre思想的游戏开发架构

    Orz是一个基于Ogre思想的游戏开发架构,好的结构可以带来更多的功能.Orz和其他的商业以及非商业游戏开发架构不同.Orz更专著于开发者的感受,简化开发者工作.Orz可以用于集成其他Ogre3D之外 ...

  6. HTML5 2D平台游戏开发#4状态机

    在实现了<HTML5 2D平台游戏开发——角色动作篇之冲刺>之后,我发现随着角色动作的增加,代码中的逻辑判断越来越多,铺天盖地的if() else()语句实在让我捉襟见肘: 这还仅仅是角色 ...

  7. heX——基于 HTML5 和 Node.JS 开发桌面应用

    heX 是网易有道团队的一个开源项目,允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.heX 是你开发桌面应用的一种新的选择,意在解决传统桌面应用开发中繁 ...

  8. 1、Cocos2dx 3.0游戏开发三找一小块前言

    尊重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27094663 前言 Cocos2d-x 是一个通用 ...

  9. HTML5 2D平台游戏开发#6地图绘制

    此前已经完成了一部分角色的动作,现在还缺少可以交互的地图让游戏看起来能玩.不过在开始之前应当考虑清楚使用什么类型的地图,就2D平台游戏来说,一般有两种类型的地图,Tile-based和Art-base ...

随机推荐

  1. 【转】Spring 注解学习手札(超好的springmvc注解教程)

    Spring 注解学习手札(一) 构建简单Web应用 Spring 注解学习手札(二) 控制层梳理 Spring 注解学习手札(三) 表单页面处理 Spring 注解学习手札(四) 持久层浅析 Spr ...

  2. uva 11992 - Fast Matrix Operations

    简单的线段树的题: 有两种方法写这个题,目前用的熟是这种慢点的: 不过不知道怎么老是T: 感觉网上A过的人的时间度都好小,但他们都是用数组实现的 难道是指针比数组慢? 好吧,以后多用数组写写吧! 超时 ...

  3. csu 10月 月赛 H 题 A Very Hard Problem

    Description CX老湿经常被人黑,被黑得多了,自己也就麻木了.于是经常听到有人黑他,他都会深情地说一句:禽兽啊! 一天CX老湿突发奇想,给大家出了一个难题,并且声称谁能够准确地回答出问题才能 ...

  4. OneAlert 入门(三)——事件分析

    OneAlert 是国内首个 SaaS 模式的云告警平台,集成国内外主流监控/支撑系统,实现一个平台上集中处理所有 IT 事件,提升 IT 可靠性.有了 OneAlert,你可以更快更合理地为事件划分 ...

  5. Spring 自动装配

    1.自动装配有 bytype 和byName两种模式. 2.可以使用autowire属性指定自动装配的方式,byName根据bean的名称和当前bean的setter风格属性进行自动装配:byType ...

  6. 解决crystal report水晶报表在浏览器提示bobj未定义的错误

    网上的中文文章(比如这篇文章)都是写的部署到服务器后出现的问题,同时也指出要把crystal report的aspnet_client文件夹拷贝到对应项目的根目录里,这样就可以正常显示了,但是具体到我 ...

  7. 解决linux下导入数据库乱码问题

    引言:在windows下的mysql数据库导出SQL文件,在Linux下导入后显示为乱码. 1.启动Mysql服务及创建数据库(下面uushop为我将创建的数据库名) service mysqld s ...

  8. 【踩坑记】从HybridApp到ReactNative

    前言 随着移动互联网的兴起,Webapp开始大行其道.大概在15年下半年的时候我接触到了HybridApp.因为当时还没毕业嘛,所以并不清楚自己未来的方向,所以就投入了HybridApp的怀抱. Hy ...

  9. Android读取url图片保存及文件读取

    参考: 1.http://blog.csdn.net/ameyume/article/details/6528205 2.http://blog.sina.com.cn/s/blog_85b3a161 ...

  10. King(差分约束)

    http://poj.org/problem?id=1364 题意真心看不大懂啊... 现在假设有一个这样的序列,S={a1,a2,a3,a4...ai...at}其中ai=a*si,其实这句可以忽略 ...