首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

J2ME 架構最佳實踐:MIDlet 與 UI 介面分離模式、Display 傳遞與退出協作機制

     編輯:Java 相關知識

雖增加代碼量與複雜度,但為了可維護性與擴展性,主流 J2ME 專案均採用 MIDlet 與 UI 分離架構。核心交互內容僅兩項:Display 物件傳遞與退出處理委託。

標準分離實作範例

MIDlet 主類:生命週期控制器


package testmidlet;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class TestMIDlet extends MIDlet {
    private static TestMIDlet instance;
    private LoginForm displayable;
    private Display display;

    public TestMIDlet() {
        instance = this;
        display = Display.getDisplay(this);
        displayable = new LoginForm(display);  // 構造時注入 Display
    }
    public void startApp() { display.setCurrent(displayable); }
    public void pauseApp() {}
    public void destroyApp(boolean unconditional) {}
    // 靜態退出入口,供 UI 呼叫
    public static void quitApp() {
        instance.destroyApp(true);
        instance.notifyDestroyed();
        instance = null;
    }
}

UI 類別:繼承 Form 實作 CommandListener


package testmidlet;
import javax.microedition.lcdui.*;

public class LoginForm extends Form implements CommandListener {
    private Display display;
    public LoginForm(Display display) {
        super("Test");
        this.display = display;
        setCommandListener(this);
        addCommand(new Command("Exit", Command.EXIT, 1));
    }
    public void commandAction(Command command, Displayable displayable) {
        if (command.getCommandType() == Command.EXIT) {
            TestMIDlet.quitApp();  // 委託 MIDlet 退出
        }
    }
}

設計要點

  • Display 由 MIDlet 建構子取得並傳遞給 UI 建構子,避免 UI 靜態存取 Display.getDisplay(midlet) 產生耦合。
  • 退出邏輯集中在 MIDlet quitApp(),UI 僅呼叫靜態方法,不直接操作 MIDlet 生命週期 API。
  • 單例 instance 讓靜態方法能存取 MIDlet 實例;銷毀時置 null 釋放引用。
  • 擴展性:可引入多場景 Displayable,MIDlet 僅負責 setCurrent() 切換,UI 之間無直接依賴。

此模式清晰劃分「控制器」與「視圖」職責,是 J2ME 專案邁向 MVC 架構的基石步驟。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved