淺析Swing體系結(jié)構(gòu)
本文主要敘述Swing體系結(jié)構(gòu),解釋了Swing架構(gòu)關(guān)鍵概念,為Swing/AWT和SWT的比較做一鋪墊。
Swing體系結(jié)構(gòu)最初Smalltalk系統(tǒng)的UI工具使用所謂的模型-視圖-控制(MVC)模式,MVC引入這樣一個(gè)概念:數(shù)據(jù)源應(yīng)該同屏幕展現(xiàn)分開。這是一個(gè)優(yōu)秀的體系設(shè)計(jì)結(jié)構(gòu),能促進(jìn)代碼重用和程序框架。Swing使用的是一個(gè)變體的MVC架構(gòu)。
典型的Swing GUI組件包括至少三個(gè)對(duì)象:一個(gè)Component,一個(gè)Model和一個(gè)UI Delegate,在這個(gè)框架中,Model負(fù)責(zé)存儲(chǔ)數(shù)據(jù),UI Delegate負(fù)責(zé)從Model獲取數(shù)據(jù)并渲染到屏幕上去,Component通常協(xié)調(diào)Model和Delegate之間的操作,并同時(shí)負(fù)責(zé)將 Swing嵌入到AWT窗口系統(tǒng)中。
注意,UI Delegate對(duì)象可以在運(yùn)行的時(shí)候動(dòng)態(tài)替換,這就使Swing具備了可插拔的外觀(Pluggable Look-And-Feel, PLAF)。
雖然Swing的MVC結(jié)構(gòu)顯然具備靈活性的好處,但是這個(gè)結(jié)構(gòu)通常被指責(zé)為一些程序慢的根源。雖然基于MVC結(jié)構(gòu)需要更多的方法調(diào)用來支持額外的重定向,其實(shí)花費(fèi)在這兒的消耗很小。對(duì)基于Swing的應(yīng)用程序profile的結(jié)果顯示,model-view分隔的開銷可以忽略不計(jì),不到CPU總開銷的 1%,復(fù)雜的Swing用戶界面的多數(shù)處理事件其實(shí)都花費(fèi)在了底層的圖形操作上了。Swing的model-view結(jié)構(gòu)并不是低性能的根源,它是構(gòu)建可擴(kuò)展程序的關(guān)鍵。
Swing 提供了一些處理大數(shù)據(jù)量數(shù)據(jù)集的組件,包括JTable、JTree、JList以及JComboBox。這些矢量組件被設(shè)計(jì)成能夠處理成千上萬甚至數(shù)百萬的數(shù)據(jù),為了避免占用大量?jī)?nèi)存,這些組件在Swing體系結(jié)構(gòu)增加了渲染器(renderer)概念。
【編輯推薦】