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

從 Java 類庫看設計模式(五):MVC 模式在 Swing 與 J2EE 中的實踐

     編輯:Java 相關知識

前言

MVC(Model-View-Controller)雖不屬於 GoF 23 種設計模式,但被 GoF 書作為重要範例推崇,屬於**高層架構模式**,由多個基礎模式組合而成。本文分析 MVC 在 Java Swing(元件層級)與 J2EE(企業應用架構層級)的兩種實踐形態。

MVC 核心角色

  • Model:封裝資料源與業務操作,代表元件狀態。
  • View:封裝資料呈現,一個 Model 可對應多個 View。
  • Controller:封裝外部操作,轉發至 Model,解耦 View 與 Model。

模式組合視角

  • Model-View:Observer 模式**——模型狀態變更通知視圖更新。
  • View-Controller:Strategy 模式**——視圖透過具體 Controller 實例實現特定回應策略。
  • 其他組合:Composite(視圖嵌套)、Factory Method(指定 Controller)等。

Swing 中的 MVC 變體:Model-ViewController (M-VC)

設計演進

Swing 初期採用標準 MVC,但發現 View 與 Controller 緊密耦合,難以通用化,故演變為 **M-VC**:Model 獨立介面,View 與 Controller 融合於 UI Delegate** 中。

關鍵實作

  • Model 介面:如 BoundedRangeModel 同時服務 JProgressBar、JScrollBar、JSlider,體現模型共用。
  • UI Delegate:每個元件持有 UI 介面實例,負責繪製與事件處理(Look & Feel 切換關鍵)。
  • 事件通知機制:採用 JavaBeans 事件模型,Model 維護 Observer 列表,狀態變更時通知 UI。
    • 輕量通知:僅告知狀態改變,由 Listener 向 Model 取值(適合高頻事件如 JScrollBar)。
    • 狀態攜帶通知:事件物件包含變更值(適合 JTable 等複雜元件)。

J2EE 中的 MVC:架構層級的模式應用

藍圖定位

層級技術角色
ViewJSP(產生 HTML/WML/XML)多種用戶介面渲染
ControllerServlet / JavaBean接收請求、協調業務邏輯、選擇視圖
ModelEJB (Entity Bean 封裝資料, Session Bean 封裝操作)核心業務邏輯與持久化

Controller 選擇策略

  • Servlet:可獨立處理請求,適合複雜流程控制,但與 JSP 交互較繁瑣。
  • JavaBean:與 JSP 搭配天然(jsp:useBean、EL 表達式),專注視圖渲染,桌面應用亦可複用。
  • 混合:Servlet 處理流程控制,委派 JavaBean 處理業務邏輯與資料封裝。

核心優勢

  • **多介面支援**:同一 Model 服務 Web、無線、Web Service、Swing 等多種 View。
  • **關注點分離**:業務邏輯不混雜於視圖,提升可測試性、可維護性、可擴展性。
  • **動態切換**:運行時根據用戶裝置、角色、工作流選擇不同 View/Controller。

總結

MVC 從 Swing 的元件級 M-VC 變體,到 J2EE 的企業級架構模式,展現了設計模式在不同抽象層級的靈活應用。理解其內在模式組合(Observer、Strategy、Composite 等),能幫助開發者在具體專案中做出更合適的架構決策。

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