JavaMe连载(3)-也说MVC设计模式
【更新】本文将适时做出更新,所以现在不是终稿,如有不当之处,敬请指出。
【问题描述】介绍设计模式的文章和书很多,但只有使用时,才能理解设计模式的妙处。接上一篇《JavaMe连载(2)-低级界面绘图之菜单》,本文一则对UIController作出解释,一则将自己理解的MVC设计模式,结合实例,与大家交流学习。
【理论】什么是MVC?
MVC就是模型(model)、视图(view)和控制(control)。什么是模型呢?本例中,模型就是对数据使用时的封装。视图很容易理解,那就是显示内容的具体表示。控制呢?有很多人对视图和控制分不清。在本例中,控制包含视图控制器以及方法的封装。
【实例】
1 先看工程结构,如图1所示。
图1 工程结构
工程中将用户数据单独封装,作为model。供控制器和视图调用。将显示页面单独封装,作为视图。将视图控制器UIController和常用方法封装为util。UIController就是控制。
2 UML图(后续更新时补充)
先看代码,再分析工作机理
【代码清单】
MainMidlet.java
[html] package com.token.midlet;
import java.io.IOException;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import com.token.util.UIController;
public class MainMidlet extends MIDlet {
private Display display;
private static UIController controller;
public MainMidlet() {
// TODO Auto-generated constructor stub
super();
display=Display.getDisplay(this);
}
/* (non-Javadoc)
* @see javax.microedition.midlet.MIDlet#pauseApp()
*/
protected void startApp() throws MIDletStateChangeException {
controller=new UIController(this);
try {
controller.init();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//初始化RecordStore
}
/* (non-Javadoc)
* @see javax.microedition.midlet.MIDlet#pauseApp()
*/
protected void pauseApp() {
this.notifyPaused();
}
/* (non-Javadoc)
* @see javax.microedition.midlet.MIDlet#destroyApp(boolean)
*/
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
controller=null;
}
public void setCurrent(Displayable disp){
display.setCurrent(disp);
}
public void setCurrent(Alert alert, Displayable disp){
display.setCurrent(alert, disp);
}
public Displayable getCurrent(){
return display.getCurrent();
}
public void exit(boolean arg0){
try{
destroyApp(arg0);
notifyDestroyed();
}catch(MIDletStateChangeException e){
//
}
}
}
package com.token.midlet;
import java.io.IOException;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import com.token.util.UIController;
public class MainMidlet extends MIDlet {
private Display display;
private static UIController controller;
public MainMidlet() {
// TODO Auto-generated constructor stub
super();
display=Display.getDisplay(this);
}
/* (non-Javadoc)
* @see javax.microedition.midlet.MIDlet#pauseApp()
*/
protected void startApp() throws MIDletStateChangeException {
controller=new UIController(this);
try {
controller.init();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//初始化RecordStore
}
/* (non-Javadoc)
* @see javax.microedition.midlet.MIDlet#pauseApp()
*/
protected void pauseApp() {
this.notifyPaused();
}
/* (non-Javadoc)
* @see javax.microedition.midlet.MIDlet#destroyApp(boolean)
*/
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
controller=null;
}
public void setCurrent(Displayable disp){
display.setCurrent(disp);
}
public void setCurrent(Alert alert, Displayable disp){
display.setCurrent(alert, disp);
}
public Displayable getCurrent(){
return display.getCurrent();
}
public void exit(boolean arg0){
try{
destroyApp(arg0);
notifyDestroyed();
}catch(MIDletStateChangeException e){
//
}
}
}
模型(Model)
UserDataItem.java
[html] package com.token.model;
import com.token.util.StringDealMethod;
public class UserDataItem {
private int id;
public String name = null;
public String passwd = null;
public UserDataItem(String name,String passwd)
{
this.name = name;
this.passwd = pas
补充:软件开发 , Java ,