JavaMe连载(3)-也说MVC设计模式
【更新】本文将适时做出更新,所以现在不是终稿,如有不当之处,敬请指出。
【问题描述】介绍设计模式的文章和书很多,但只有使用时,才能理解设计模式的妙处。接上一篇《JavaMe连载(2)-低级界面绘图之菜单》,本文一则对UIController作出解释,一则将自己理解的MVC设计模式,结合实例,与大家交流学习。
【理论】什么是MVC?
MVC就是模型(model)、视图(view)和控制(control)。什么是模型呢?本例中,模型就是对数据使用时的封装。视图很容易理解,那就是显示内容的具体表示。控制呢?有很多人对视图和控制分不清。在本例中,控制包含视图控制器以及方法的封装。
【实例】
1 先看工程结构,如图1所示。
图1 工程结构
工程中将用户数据单独封装,作为model。供控制器和视图调用。将显示页面单独封装,作为视图。将视图控制器UIController和常用方法封装为util。UIController就是控制。
2 UML图(后续更新时补充)
先看代码,再分析工作机理
【代码清单】
MainMidlet.java
模型(Model)
UserDataItem.java
控制(control)
UIController.java
UserDataRecord.java
视图(view)
WelcomeScreen.java
UserRegist.java
*TextEdit是利用GameCanvas绘制的自定义文本编辑框。后续文章将给出具体实现。
【分析】
1 在MainMidlet调用控制器UIController,并向UIController传递midlet作为参数。
2 控制器的实现是通过一个事件的机制实现的, 在UIController中,先建立一个事件ID的内部类。
3 一次性初始化所有界面,分配内存,调用时,只是执行视图类的show方法。为什么不将初始话放在调用时进行呢?主要是因为视图类有多次重用,如果每一次调用都new(初始化,分配内存)一次,手机有限的内存很快会被用光,这是会出现一些程序自动退出的问题。
4 控制器对视图的处理采用状态机实现
5 视图类初始化时,需要将控制器作为参数初始化,以对事件做出判断。如WelcomeScreen.java中先做出如下声明:
再在构造函数中,传递控制器
6 视图切换事件响应采用如下方式,在keyPressed中,对按键事件进行判断,然后调用UIController的handEvent方法。
7 控制器可以通过handEvent的args传递参数,如
UserRegist传递了一个update变量给下一个视图。
8 在看一下模型,在UserDataItem中存储的是用户注册的信息。利用UserDataRecord类对记录进行操作。
在视图类中,通过以下方式调用:
先声明
构建对象
使用对象
9 包com.token.view.components是对视图类中使用的自定义控件的封装
综述,这样就实现了模型、视图、控制的分离。
【参考文献】
(1) 万辉,王军[M]. 基于Eclipse环境的J2ME应用程序开发,清华大学出版社
(2) http://blog.csdn.net/cjjky/article/category/807008
转载请标明出处,仅供学习交流,勿用于商业目的
Copyright @ http://blog.csdn.net/tandesir