pureMVC java版搭建流程

转自:http://blog.csdn.net/sutaizi/article/details/6588004

pureMVC 是一个轻量级的框架 它在 flex中非常流行(和cairngorm差不多火)

目前几乎已经移植到所有平台上。

下面实现java版得pureMVC搭建

先给大家看总体的层次:

众所周知 pureMVC是一个轻量级的MVC框架 分为 Model ,View ,Controller。这三个是pureMVC的核心。

除此之外pureMVC中含有一个单例模式Facade。facade负责与Model,View,Controller通信。这样就简化了开发的复杂度。

所以首先需要编写单一模式类facade 也就是上图的 ApplicationFacade.java

[java] view plaincopy

  1. public class ApplicationFacade extends Facade {
  2. //
  3. private static ApplicationFacade instance = null;
  4. //启动的主程序实例
  5. private PureMVC_Main main ;
  6. /**
  7. *
  8. * @return
  9. */
  10. public static ApplicationFacade getInstance(){
  11. if( instance == null) instance = new ApplicationFacade ();
  12. return instance ;
  13. }
  14. /**
  15. *
  16. */
  17. protected void initializeController() {
  18. trace.d("ApplicationFacade.initController()");
  19. super.initializeController();
  20. registerCommand(NotiName.NOTI_START, StartupCommand.class);
  21. }
  22. /**
  23. *
  24. * @param main
  25. */
  26. public void startup(PureMVC_Main _main) {
  27. trace.d("ApplicationFacade.startup");
  28. this.main = _main;
  29. //发送通知(notification)给控制器 ,通知名称为 NotiName.NOTI_START(这个String是自己定义的)
  30. //sendNotification是用来发送消息的函数 这是一个全局的函数 。
  31. //三个参数为 String 通知名称
  32. //          Object 通知要传递的内容可以是任何对象
  33. //          String 一般默认为null
  34. //这个通知会在 StartCommand.java中被处理。
  35. this.sendNotification(NotiName.NOTI_START, null, null);
  36. }
  37. }

这样保证了静态变量facade只有一个实例instance

而这个getInstance 择有具体的main程序来调用,当调用时 框架就启动了。

同时在main程序启动框架时,需要同时调用startup方法,

startup方法做了这么几件事情

1.将main程序的引用传给了facade

2.注册了控制器startupCommand。

[java] view plaincopy

  1. public class StartupCommand extends MacroCommand{
  2. protected void initializeMacroCommand() {
  3. trace.d("PrepStartUpCommand.initializeMacroCommand()");
  4. addSubCommand(PrepModelCommand.class);
  5. addSubCommand(PrepControllerCommand.class);
  6. addSubCommand(PrepViewCommand.class);
  7. }
  8. }

而startupCommand又注册了另外3个控制器,他们的作用分别是

注册代理:

[java] view plaincopy

  1. public class PrepModelCommand extends SimpleCommand implements ICommand{
  2. public void execute(INotification noti){
  3. trace.d("PrepModelCommand.execute()");
  4. this.facade.registerProxy(new LoginProxy());
  5. }
  6. }

让Mediator得到页面的引用

[java] view plaincopy

  1. public class PrepViewCommand extends SimpleCommand implements ICommand{
  2. public void execute(INotification noti){
  3. trace.d("PrepViewCommand.execute("+ noti.getName() + ")");
  4. this.facade.registerMediator(new LoginMediator(new LoginWindow()));
  5. }
  6. }

还有一个 是保存Controller与Command的映射,注册消息 与Command 当Command需要时 Command会被创建。

[java] view plaincopy

  1. public class PrepControllerCommand extends SimpleCommand implements ICommand{
  2. /**
  3. * 这个方法一定会被执行。用来分析传过来的消息(Notification:PureMVC中各个模块传递的信息)
  4. */
  5. @Override
  6. public void execute(INotification noti){
  7. trace.d("PrepComtrollerCommand.excute()");
  8. this.facade.registerCommand(NotiName.NOTI_LOGIN, LoginCommand.class);
  9. }
  10. }

这样框架就启动了。下面来说说登录的例子。

PureMVC 的View分为2个部分 一个是 纯的UI界面,另一个是Mediator模式

这种模式的好处在于他将UI界面(如loginWondow.java--登录界面)中所有的UI组件 比如 button textField ..封装在一起,通过保存UI界面的应用来调用他们。

打个比方就是:

一栋宿舍楼 ,每一间宿舍都是一个UI控件,真个宿舍楼就是一个Mediator,宿舍楼门口有看门的大爷,大爷知道所有宿舍的情况,。

当有人访问宿舍们需要知道具体某间宿舍的情况的时候 他只需要去问门卫大爷。不需要亲自走到那间宿舍。就能知道具体情况。

在Mediator中有2个重要方法:

[java] view plaincopy

  1. public String[] listNotificationInterests() {
  2. String[] list = {
  3. NotiName.LOGIN_SUCCESS, NotiName.LOGIN_FAILED
  4. };
  5. return list;
  6. }
  7. @Override
  8. public void handleNotification(INotification noti) {
  9. if (noti.getName().equals(NotiName.LOGIN_SUCCESS)){
  10. trace.d("login success");
  11. }
  12. if (noti.getName().equals(NotiName.LOGIN_FAILED)){
  13. trace.d("login failed " + noti.getBody().toString());
  14. }
  15. }

第一个方法罗列出 要接受的消息名字

第二个方法进行处理消息。

再看以下代码

[java] view plaincopy

  1. public LoginMediator(LoginWindow v) {
  2. super(NAME, null);
  3. // TODO Auto-generated constructor stub
  4. this.setViewComponent(v);
  5. view = v;
  6. v.setVisible(true);
  7. v.btnLogin.addActionListener(new ActionListener(){
  8. public void actionPerformed(ActionEvent e) {
  9. // TODO Auto-generated method stub
  10. login();
  11. }
  12. });
  13. }
  14. private void login(){
  15. //得到所有用户登录的信息 就是界面上输入的信息
  16. User user = new User(
  17. view.txtName.getText(),
  18. view.pwdPwd.getText()
  19. );
  20. //将这个信息发送给LoginCommand.java控制器。
  21. //注意这个消息要在 prepControllerCommand.java中注册 建立Mediator到Command的映射关系
  22. sendNotification(NotiName.NOTI_LOGIN,user,null);
  23. }

在Mediator中 处理了所有UI中的事件  比如说为Button添加监听

并且收集数据 (收集 用户名和密码)封装到User中(自动以Object),然后发送消息给Command,把这些数据也发送出去。

此时由于刚才在PrepControllerCommand.java中注册了这个消息 对应的LoginCommand会被激活,处理这个消息。

[java] view plaincopy

  1. public class LoginCommand extends SimpleCommand implements ICommand {
  2. public void execute(INotification noti) {
  3. //根据对应的消息名字处理相关逻辑 并且调用后台(比如数据库)
  4. if (noti.getName().equals(NotiName.NOTI_LOGIN) == true) {
  5. User user = (User)noti.getBody();
  6. LoginProxy lp = new LoginProxy();
  7. if(checkLogin(user))
  8. lp.login(user);
  9. else
  10. sendNotification((String) NotiName.LOGIN_FAILED,"User name should not be empty!",null);
  11. }
  12. }
  13. private boolean checkLogin(User u){
  14. //username should not be empty
  15. if(u.getUsername() == null )return false;
  16. return true;
  17. }
  18. }

这里处理这个消息买并且调用Model中的Proxy。Proxy负责进行数据操作,比如得到远程服务器的数据,或者与数据库进行交互。

处理完数据后 吧数据通过消息(Notification)发送给Mediator 整个流程就完成了。

[java] view plaincopy

  1. public class LoginProxy extends Proxy{
  2. public static final String NAME = "LoginProxy";
  3. public LoginProxy() {
  4. super(NAME, null);
  5. trace.d("LoginProxy.LoginProxy()");
  6. }
  7. public void login(User user) {
  8. // TODO Auto-generated method stub
  9. //这里用来进行数据库操作 将User信息给数据库 ,并且返回信息。,返回方式 也是使用Notification
  10. //这里发送的Notification在Mediator中(handleNotification方法)处理 。
  11. //方便起见。,我这里就不写数据库操作了。
  12. if(user.getUsername().equals("young") )
  13. sendNotification(NotiName.LOGIN_SUCCESS,"login success!",null);
  14. else
  15. sendNotification(NotiName.LOGIN_FAILED,"login error ,wrong username",null);
  16. }
  17. }

Mediator在HandleNotification中处理Proxy发来的消息

时间: 2024-10-23 03:27:21

pureMVC java版搭建流程的相关文章

Selenium2(webdirver)入门之环境搭建(Java版)

Selenium2(webdirver)入门之环境搭建(Java版) 一.开发环境: 1.JDK1.6 2.Eclipse:Version: Kepler Service Release 1,下载地址:http://www.eclipse.org/downloads/ 3.Selenium:selenium-java-2.52.0.zip,下载地址:http://docs.seleniumhq.org/download/ 解压selenium-java包,这个包里面包含四部分,如下图: 二.新建

搭建Java版WebService

如何搭建一个Web服务,做Android开发,不可避免会涉及到客户端开发,我们怎么样来实现一个服务端,怎么样来实现一个客户端,并相互传递数据.就算调用别人的服务时,也能知道大概是怎么样实现的. WebService一般分为.Net版和Java版,今天我们主要来实现Java版的WebService,.Net版本的还是比较简单的. 什么是WebServices? 它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的web应用程序分支,是自包含.自描述.模块化的应用

Java版菠菜程序搭建BC网站项目开发给演示站包网小白的一些意见

Java版程序是目前世界上公认的高安全性扩展性最好,页面反馈速度极佳的BC网站搭建程序语言,在菲律宾,柬埔寨等东南亚国家,对Java版菠菜程序搭建的网站运营是由衷放心的特别是一些集团公司.在做BC网站项目之前,需要Q先分析3530自己的实际2742情况55,了解自己想要去做的具体方向,打算如何运营,团队如何去组建(网站一个人是运营不起来的),如果这些你都没有清楚的认识那我劝你还是别做了,应为做了对你来说没有具体的运营方向也就没办法运营好,运营不好的网站对你来说根本一文不值.考虑好了网站的运营方向

FILEBEAT+ELK日志收集平台搭建流程

filebeat+elk日志收集平台搭建流程 1.         整体简介: 模式:单机 平台:Linux - centos - 7 ELK:elasticsearch.logstash.kibana三款开源软件的集合. FILEBEAT:代替logstash的采集功能,轻量.耗用小. 目前收集的有nginx日志.java日志[单行|多行]. 都是通过在客户端的生成日志配置文件中定义好初步json格式,然后利用filebeat采集到logstash,存储到elasticsearch,最后通过k

SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>

此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblogs.com/wkrbky/p/5912810.html 一.Hibernate(数据层)的搭建: 实现流程 二.Spring(注入实例)的使用: 实现流程 三.Struts2(MVC)的搭建: 实现流程 这里注意一点问题: Struts2与Hibernate在一起搭建,antlr包,有冲突.MyE

SSM框架——整合搭建流程

本文是作者在看完 http://blog.csdn.net/zhshulin/article/details/37956105/ 之后自己搭建的流程: 1.首先创建maven工程,使用哪种方式进行创建都可以,可以参考博主之前的文章: <两种方式创建Maven项目[方式二]><两种方式创建Maven项目[方式一]> 2.先看看搭建最终搭建完成后的项目结构: 3.搭建流程: 数据库使用的是:mysql ide使用的是:eclipse[Version: Neon.2 Release (4

AKKA文档(java版)

目前我正在翻译AKKA官网文档.翻译:吴京润 译者注:本人正在翻译AKKA官网文档,本篇是文档第一章,欢迎有兴趣的同学加入一起翻译.更多内容请读这里:https://tower.im/projects/ac49db18a6a24ae4b340a5fa22d930dc/lists/ded96c34f7ce4a6bb8b5473f596e1008/show/https://tower.im/projects/ac49db18a6a24ae4b340a5fa22d930dc/todos/640e53d

应用程序初次运行数据库配置小程序(Java版)

应用程序初始化数据库配置小程序 之前写过一个Java版的信息管理系统,但部署系统的时候还需要手动的去配置数据库和导入一些初始化的数据才能让系统运行起来,所以我在想是不是可以写一个小程序在系统初次运行的时候自动部署数据库和导入一些初始化数据.然后就有了以下的思路: 在应用程序入口处判断数据库是否已经配置完成,若配置完成则进入正常的登录系统完成正常操作即可,若未配置则进入数据库配置的小程序完成数据库配置然后再进入系统,但如何来判断是否已经配置完成呢,在这里我用的是比较原始的方法,配置数据库的时候系统

微信公众平台深度开发JAVA版第二季视频教程

微信公众平台深度开发JAVA版第二季(九宝饭店微信点餐系统)视频教程下载密码:qa4a     联系QQ:1026270010 微信作为当前流行的通信社交软件有了上亿的用户量,几乎每一个只能手机都要安装微信.但是,市场上对于JAVA开发微信公众平台的资料却少之又少,多数的资料一般是其他语言的.因此,主讲老师经过潜心研究.认真准备,录制了这套针对JAVA开发语言的微信公众平台开发教程. 1.课程研发环境 开发语言:JAVA WEBServer:TOMAT DATABASE:MySQL 开发工具:m