熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

JavaMe開發:也說MVC設計模式

2013-11-23 19:40:24  來源: Java高級技術 

  

  【問題描述】介紹設計模式的文章和書很多但只有使用時才能理解設計模式的妙處接上一篇《JavaMe連載()低級界面繪圖之菜單》本文一則對UIController作出解釋一則將自己理解的MVC設計模式結合實例與大家交流學習

  【理論】什麼是MVC?

  MVC就是模型(model)視圖(view)和控制(control)什麼是模型呢?本例中模型就是對數據使用時的封裝視圖很容易理解那就是顯示內容的具體表示控制呢?有很多人對視圖和控制分不清在本例中控制包含視圖控制器以及方法的封裝

  【實例】

  先看工程結構如圖所示

  
工程結構

  工程中將用戶數據單獨封裝作為model供控制器和視圖調用將顯示頁面單獨封裝作為視圖將視圖控制器UIController和常用方法封裝為utilUIController就是控制

  UML圖(後續更新時補充)

  先看代碼再分析工作機理

  【代碼清單】

  MainMidletjava

  package comtokenmidlet;  
    
   import javaioIOException;  
    
   import javaxmicroeditionlcdui*;  
   import javaxmicroeditionmidletMIDlet;  
   import javaxmicroeditionmidletMIDletStateChangeException;  
   import comtokenutilUIController;  
    
   public class MainMidlet extends MIDlet {  
         
       private Display display;  
       private static UIController controller;  
       public MainMidlet() {  
           // TODO Autogenerated constructor stub  
           super();  
           display=DisplaygetDisplay(this);  
             
       }  
    
       /* (nonJavadoc)  
        * @see javaxmicroeditionmidletMIDlet#pauseApp()  
        */ 
       protected void startApp() throws MIDletStateChangeException {  
           controller=new UIController(this);  
           try {  
               controllerinit();  
           } catch (IOException e) {  
               // TODO Autogenerated catch block  
               eprintStackTrace();  
           }//初始化RecordStore  
       }  
    
       /* (nonJavadoc)  
        * @see javaxmicroeditionmidletMIDlet#pauseApp()  
        */ 
       protected void pauseApp() {  
           thisnotifyPaused();  
       }  
    
       /* (nonJavadoc)  
        * @see javaxmicroeditionmidletMIDlet#destroyApp(boolean)  
        */ 
       protected void destroyApp(boolean arg) throws MIDletStateChangeException {  
           controller=null;  
             
       }  
         
       public void setCurrent(Displayable disp){  
           displaysetCurrent(disp);  
       }  
         
       public void setCurrent(Alert alert Displayable disp){  
           displaysetCurrent(alert disp);  
       }  
       public Displayable getCurrent(){  
           return displaygetCurrent();  
       }  
         
       public void exit(boolean arg){  
           try{  
               destroyApp(arg);  
               notifyDestroyed();  
           }catch(MIDletStateChangeException e){  
               //  
           }  
       }  
    
   }  

  模型(Model)

  UserDataItemjava

  package comtokenmodel;  
    
   import comtokenutilStringDealMethod;  
    
   public class UserDataItem {  
       private int id;  
       public String name = null;  
       public String passwd = null;  
    
       public UserDataItem(String nameString passwd)  
       {  
           thisname = name;  
           thispasswd = passwd;     
       }  
         
       public UserDataItem(int idbyte[] data){  
           thisid=id;  
           String temp=new String(data);  
           String temp_sub[] = StringDealMethodsplit(temp );  
           thisname = temp_sub[];  
           thispasswd = temp_sub[];  
       }  
         
       public int getId(){  
           return id;  
       }  
         
       public void setId(int id){  
           thisid=id;  
       }  
         
       public String getName(){  
           return name;  
       }  
         
       public void setName(String name){  
           thisname = name;  
       }  
         
       public String getPasswd(){  
           return passwd;  
       }  
         
       public void setPasswd(String passwd){  
           thispasswd = passwd;  
       }  
         
       public byte[] getBytes(){  
           String temp=null;  
             
           if(name==null||passwd==null){  
               return null;  
           }else{  
               temp=name++passwd;  
           }  
             
           return tempgetBytes();  
       }  
   }  

  控制(control)

  UIControllerjava

  package comtokenutil;  
    
   import javaioIOException;  
    
   import javaxmicroeditionlcdui*;  
    
   import comtokenmidletMainMidlet;  
   import comtokenmodel*;  
   import comtokenview*;  
   //import ponentsColor;  
    
   public class UIController {  
    
       private MainMidlet midlet;  
         
       private TokenDataRecord tokenRecord;  
         
       private WelcomeScreen welcomeScreen;  
       private UserRegist reg;   
       private ActiveScreen activeScreen;  
       private MainScreen mainScreen;  
       private GenPasswd gen;  
       private CheckScreen check;  
       private ViewToken viewToken;  
       private UserManage manage;  
       private ShowHelp help;  
       private UserAuth auth;  
       private PopUpTextBox textBox;  
         
       int id = ;  
         
       public UIController(MainMidlet midlet)  
       {  
           thismidlet = midlet;  
             
           tokenRecord = new TokenDataRecord();  
       }  
         
       public void init() throws IOException{  
             
           try {  
               SplashScreen splashScreen = new SplashScreen();  
               setCurrent(splashScreen);  
               Threadsleep();  
                 
               nfigureColor();  
               initObject();     
                 
               //tokenRecorddb_deleteAllRecord();  
               if(tokenRecorddb_getRecord()==null)  
               {  
                   //Systemoutprintln(add);  
                   ChaosMethods method = new ChaosMethods();  
                   TokenDataItem tokenItem = new TokenDataItem((methodChaosInitCode()+false)getBytes());  
                   id=tokenRecorddb_addRecord(tokenItem);  
               }  
                 
               //Systemoutprintln(id);  
               TokenDataItem tokenItem = tokenRecorddb_getRecord(id);  
               //Systemoutprintln(tokenItemtoken++tokenItemisActive);  
                 
               if(tokenItemgetStatus()equals(false))  
               {  
                   thishandleEvent(UIControllerEventIDEVENT_NEXT_WELCOME_SCREENnull);  
               }else 
               {  
                   String flag = ;  
                   Object [] args = {flag};  
                   thishandleEvent(UIControllerEventIDEVENT_MAIN_SCREENargs);  
               }  
           } catch (InterruptedException e) {  
               // TODO Autogenerated catch block  
               eprintStackTrace();  
           }  
             
       }  
         
       private void initObject()  
       {  
           welcomeScreen = new WelcomeScreen(this);  
           reg= new UserRegist(this);  
           activeScreen = new ActiveScreen(this);  
             
           textBox = new PopUpTextBox(this輸入文本  TextFieldANY);  
       }  
         
       //getMethod  
       public void setCurrent(Displayable disp){  
           midletsetCurrent(disp);  
       }  
       public void setCurrent(Alert alert Displayable disp){  
           midletsetCurrent(alert disp);  
       }  
         
       //定義事件ID內部類  
       public static class EventID{  
           private EventID(){  
           }  
             
           public static final byte EVENT_EXIT = ;//退出  
           public static final byte EVENT_NEXT_WELCOME_SCREEN = ;//歡迎界面  
           public static final byte EVENT_NEXT_USER_REGIST_SCREEN = ;//用戶注冊  
           public static final byte EVENT_USER_REGIST_EDIT = ;//用戶注冊編輯  
           public static final byte EVENT_USER_REGIST_EDIT_BACK = ;//用戶注冊編輯返回  
           public static final byte EVENT_NEXT_ACTIVE_SCREEN = ;  
          //  
       }  
         
       //事件處理  
       public void handleEvent( int eventID Object[] args)  
       {  
           switch (eventID)  
           {     
               case EventIDEVENT_EXIT:  
               {  
                   midletexit(false);  
                   break;  
               }  
               case EventIDEVENT_NEXT_WELCOME_SCREEN:  
               {  
                       welcomeScreenshow();  
                   midletsetCurrent(welcomeScreen);  
                   break;  
               }  
               case EventIDEVENT_NEXT_USER_REGIST_SCREEN:  
               case EventIDEVENT_USER_REGIST_EDIT_BACK:  
               {  
                   regshow(args);  
                   Thread thread = new Thread(reg);  
                   threadstart();  
                   midletsetCurrent(reg);  
                   break;  
               }  
               case EventIDEVENT_USER_REGIST_EDIT:  
               {  
                   textBoxinit(args);  
                   midletsetCurrent(textBox);  
                   break;  
               }  
               case EventIDEVENT_NEXT_ACTIVE_SCREEN:  
               {  
                   activeScreenshow(args);  
                   Thread thread = new Thread(activeScreen);  
                   threadstart();  
                   midletsetCurrent(activeScreen);  
                   break;  
               }  
               //  
               default:  
                   break;  
           }  
       }  
   }  


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27275.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.