当前位置:编程学习 > JAVA >>

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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,