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

透過 Java Swing 看透 MVC 設計模式:組件級的關注點分離

     編輯:Java 程式設計入門

優秀 GUI 設計在現實世界有對應表現。鍵盤按鍵:一部分賦予動作特性(可按下),另一部分負責表現(代表 A 或 B)。這兩點蘊含強大設計方法:鼓勵復用而非重新設計。按鈕機理相同,頂部噴不同字母即得「不同」按鈕,無需為每個按鈕重新設計圖紙,大幅降低難度。

將此思想應用到軟體開發,Model/View/Controller (MVC) 便是這一實現。雖 MVC 常用於設計整個 GUI,但 JFC (Swing) 設計者獨創性地將 MVC 用於設計單個組件:JTable、JTree、JComboBox 等,每個組件都有 Model、View、Controller,且可獨立改變(甚至運行時),使 GUI 工具包極其靈活。

Swing 中的 MVC 三角色

  • Model:組件狀態與低級行為。管理自身狀態、處理狀態操作。不知使用自己的 View/Controller 是誰,系統維護與 View 關係,Model 變化通知相應 View。
  • View:Model 數據的視覺呈現。一 Model 可多 View,但 Swing 少見。
  • Controller:管理 Model 與用戶交互控制。提供處理 Model 狀態變化的方法。

鍵盤按鍵類比:Model = 整個機械裝置,View/Controller = 按鍵表面(常合併為 UI)。

以 JButton 為例深度剖析

Model:ButtonModel 介面

按鈕 Model 行為由 ButtonModel 介面定義。實例封裝內部狀態、定義行為。方法分四類:

  1. 查詢內部狀態
  2. 操作內部狀態
  3. 添加/刪除事件監聽器
  4. 觸發事件

程式員通常不直接操作 Model/View/Controller,它們隱藏在繼承自 java.awt.Component 的組件中,這些組件像膠水將 MVC 合三為一。Swing 組件多直接繼承對應 AWT 組件,提供更便利功能,通常無需混合使用。

MVC 在組件級的優勢

  • 外觀與行為分離:同一 Model 可搭配不同 Look & Feel(Metal、Nimbus、Windows)
  • 行為可擴展:自定義 Model 實現特殊行為(如限制輸入長度的文本框)
  • 測試友好:Model 可獨立單元測試,無需 GUI 環境
  • 運行時切換:動態替換 View/Controller 實現主題切換、無障礙模式

這種組件級 MVC 是 Swing 靈活性的核心來源,也是現代 GUI 框架(如 JavaFX、React、Flutter)繼承發揚的設計精髓。

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