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

 

 

 

 

 

 

 

 

 

 

posted @ 2012-05-06 09:37  j2ee技术  阅读(230)  评论(0)    收藏  举报