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

J2ME 架構基礎:MIDlet 與界面分離的 MVC 落地實踐

     編輯:J2ME

為什麼要分離

J2ME 單類混雜 MIDlet 生命周期、界面邏輯、業務數據,導致代碼難維護、難測試、難復用。引入「MIDlet 作為 Controller、Displayable 子類作為 View」的輕量級分層,能顯著提升結構清晰度。

核心交互契約

界面層需從 MIDlet 獲取兩樣東西:

  1. Display 對象:用於切換顯示、獲取屏幕尺寸。
  2. 退出入口:用戶點擊「退出」命令時通知 MIDlet 銷毀。

參考實現

MIDlet 層(Controller + 生命周期)

public class TestMIDlet extends MIDlet {
    private static TestMIDlet instance;
    private LoginForm loginForm; // View 持有引用

    public TestMIDlet() { instance = this; }

    public void startApp() {
        if (loginForm == null) loginForm = new LoginForm(this);
        Display.getDisplay(this).setCurrent(loginForm);
    }

    public void pauseApp() {}
    public void destroyApp(boolean unconditional) {}

    /** 供 View 調用的靜態退出入口 */
    public static void quitApp() {
        instance.destroyApp(true);
        instance.notifyDestroyed();
        instance = null;
    }
}

View 層(登錄表單)

public class LoginForm extends Form implements CommandListener {
    private Display display; // 若需主動切換畫面
    private Command exitCmd = new Command("Exit", Command.EXIT, 1);

    public LoginForm(TestMIDlet midlet) {
        super("Login");
        // 方式一:傳遞 MIDlet 實例,內部調用 midlet.quitApp()
        // 方式二:傳遞 Display,此處演示傳 MIDlet
        addCommand(exitCmd);
        setCommandListener(this);
        // 初始化輸入框...
    }

    public void commandAction(Command c, Displayable d) {
        if (c == exitCmd) TestMIDlet.quitApp();
        // 其他命令處理...
    }
}

進階擴展:多畫面管理器

隨著畫面增多,建議引入 ScreenManager 單例:

  • 持有 Display 靜態引用。
  • 提供 show(Screen)、back()、push/pop 堆疊導航。
  • 統一處理系統命令(退出、幫助、關於)。

最佳實踐清單

  1. MIDlet 僅負責生命周期、全局資源(網絡、RMS、音頻)初始化/釋放。
  2. 每個 Displayable 專注單一業務場景,構造器注入依賴(Display、Manager、Service)。
  3. 命令處理委託給 Controller 或 Presenter,View 僅負責渲染與事件轉發。
  4. 避免在 paint() 執行耗時操作;異步任務用線程池,完成後 Display.callSerially(() -> repaint()) 刷新。

總結

「MIDlet-View 分離」是 J2ME 工程化的第一步。雖不及現代 MVC 框架完備,但以極低開銷換取代碼可讀性、可測試性與團隊協作效率,絕對物超所值。

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