//1
var
  MainWindow: TMainWindow;
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TMainWindow, MainWindow);
  ApplicationFacade.Startup(MainWindow);            
  Application.Run;
end.

//2
function ApplicationFacade: IApplicationFacade;
begin
  Result := (TApplicationFacade.Instance as IApplicationFacade)
end;

//3
procedure TFacade.InitializeFacade;
begin
  InitializeModel;
  InitializeController;
  InitializeView;
end;

//4 TApplicationFacade 调用父类的注册命令方法
procedure TApplicationFacade.InitializeController();
begin
  /// call inherited to use the PureMVC Controller Singleton.
  inherited;
  /// Otherwise, if you're implmenting your own
  /// IController, then instead do:
  /// if Assigned(FController) then Exit;
  /// FController = MyAppController.getInstance;

/// do any special subclass initialization here
  /// such as registering Commands
  RegisterCommand(MSG.Startup, TStartupCommand);
  RegisterCommand(MSG.DELETE_USER, TDeleteUserCommand);
  RegisterCommand(MSG.ADD_ROLE_RESULT, TAddRoleResultCommand);
end;

//5 TFacade 调用控制器注册命令方法
procedure TFacade.RegisterCommand(NotificationName: string;
    CommandClass: TClass);
begin
  FController.RegisterCommand(NotificationName, CommandClass);
end;

procedure TController.RegisterCommand(NotificationName: string; CommandType: TClass);
begin
  Assert(CommandType.InheritsFrom(TCommand));//是否继承自TCommand
  TMonitor.Enter(FSyncRoot);
  try
    if FCommandMap.ContainsKey(NotificationName) then Exit;//注册过的命令则放弃

// This call needs to be monitored carefully. Have to make sure that RegisterObserver
    // doesn't call back into the controller, or a dead lock could happen.

FView.RegisterObserver(NotificationName, TObserver.Create('ExecuteCommand', Self));//视图注册观察者,收到此消息时即可调用消息对应的命类的执行方法
    FCommandMap.Add(NotificationName, TCommandClass(CommandType));//控制器命令列表中增加新命令

finally
    TMonitor.Exit(FSyncRoot);
  end;
end;

pureMVC学习之一的更多相关文章

  1. PureMVC学习笔记

    一.简介 PureMVC是基于MVC思想和一些基础设计模式建立的一个轻量级的应用框架,免费开源,最初是执行的ActionScript 3语言使用,现在已经移植到几乎所有主流平台.PureMVC官方网站 ...

  2. pureMVC介绍及学习

    1   简介 Pure MVC是在基于模型.视图和控制器MVC模式建立的一个轻量级的应用框架,这种开源框架是免费的,它最初是执行的ActionScript 3语言使用的Adobe Flex.Flash ...

  3. 【AS3 Coder】任务七:初涉PureMVC——天气预报功能实现

    转自:http://www.iamsevent.com/post/36.html AS3 Coder]任务七:初涉PureMVC——天气预报功能实现 使用框架:AS3任务描述:了解PureMVC框架使 ...

  4. (转载)puremvc框架之proxy

    (转载)http://www.cnblogs.com/yjmyzz/archive/2010/08/01/1789769.html 上一篇 puremvc框架之Command 里,已经学习了如何利用C ...

  5. 基于HTML5的SLG游戏开发( 三):认识PureMVC

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

  6. PureMVC(JS版)源码解析(四):Notifier类

         上一篇博客中,我们解析了Observer(观察者)类,这一篇博客我们来讲Notifier(通知着)类.关于Notifier类,源码注释上有这么一段: * @class puremvc.Not ...

  7. pureMVC简单示例及其原理讲解一(开篇)

    pureMVC是一个MVC框架,皆在最大限度的减少MVC间的耦合性.本人刚刚接触pureMVC时感到一头雾水,不知从何入手,也不知道从何学习.好在本人有耐性且能看懂英文技术文档,面向对象的编程能力也比 ...

  8. 实战 PureMVC

    最近看PureMVC,在IBM开发者社区发现此文,对PureMVC的讲解清晰简洁,看了可快速入门.另外,<腾讯桌球>游戏的开发者吴秦,也曾进一步剖析PureMVC,可结合看加深理解. 引言 ...

  9. PureMVC 官方文档翻译(一)

    最近在学习PureMVC框架,感觉最权威的还是阅读官方文档,顺便翻译了下全当记笔记了. PureMVC概览 这篇文档他讨论PureMVC框架的类和接口,使用UML来阐述它们的角色.职责和协作. Pur ...

随机推荐

  1. 一行JS代码,解决DedeCMS TAG标签错误输入符号问题

    在维护内容的时候, Tag标签输入经常要来回切换输入法,  只能通过','号分隔.  中文用户, 输入法出来的经常是全角的, 经常弄错, 增加了检查的工作量,  现在只要一句JS代码, 就自动替换所有 ...

  2. HDU 5264 pog loves szh I (字符串,水)

    题意:设有两个串A和B,现将B反转,再用插入的形式合成一个串.如:A:abc   B:efg:反转B先,变gfe:作插入,agbfce.现在给出一个串,要求还原出A和B. 思路:扫一遍O(n),串A在 ...

  3. Java正则表达式之语法规则

    正则表达式是一种强大而灵活的文本处理工具,使用正则表达式能够以编程的方式,构造复杂的文本模式,并对输入的字符串进行搜索.一旦找到了匹配这些模式的部分,就能够随心所欲地它们进行处理.正则表达式提供了一种 ...

  4. zoj 2105 Lifting the Stone

    题意   裸的计算几何  求多边形重心: #include<iostream> #include<stdio.h> #include<cstring> #inclu ...

  5. php 使用phpmailer 发送邮件(附带中文乱码的解决方法)

    下载phpmailer ,在程序里包含class.phpmailer.php 类  ,这里有中文乱码的解决方法 实例代码如下 <html> <head> <title&g ...

  6. unity, setting standard shader by script

    http://forum.unity3d.com/threads/change-standard-shader-render-mode-in-runtime.318815/

  7. 关于“怎么比较两个SQL查询语句产生的结果集是否相同”搜集到的一些资料

    一. 如果你这两个结果集都没有close,可以这样: rs.last(); rs2.last(); if (rs.getRow() != rs2.getRow()) { //记录数不等,即结果不等 } ...

  8. .net core 中的序列化和反序列化

    学习博客:http://www.voidcn.com/blog/dujingjing1230/article/p-1204454.html

  9. 关于浮动-float

    1.存在浏览器兼容问题:js代码 2.对于这种存在浏览器兼容问题的问题,我们可以绕开兼容性问题,先在css样式写好,然后通过该变className 3.学习的博客 https://paran.io/c ...

  10. 【转】loadrunner检查点设置

    转自:http://www.cnblogs.com/fnng/archive/2013/03/10/2953257.html 判断脚本是否执行成功是根据服务器返回的状态来确定的,如果服务器返回的HTT ...