說(shuō)到MVC,大家都知道他是構(gòu)建GUI的有力模型。不過(guò)MVC本身比較抽象和寬泛,所以對(duì)于它的實(shí)現(xiàn)有很多。
swing對(duì)于MVC的實(shí)現(xiàn)用一句話來(lái)說(shuō)就是:一個(gè)GUI組件對(duì)應(yīng)著一個(gè)MVC體系。
在這個(gè)體系當(dāng)中JComponent這樣的組件就扮演者M(jìn)VC中的C,那拿JTable來(lái)說(shuō),MVC 就是 TableModel JTable TableUI.
這種將MVC幾乎實(shí)施到每一個(gè)GUI元素的設(shè)計(jì)相當(dāng)?shù)撵`活.對(duì)于swing 的MVC還有一個(gè)重要的特點(diǎn)就是它對(duì)于model
作了進(jìn)一步的區(qū)分,那就是真正表達(dá)程序數(shù)據(jù)的model,和僅僅表達(dá)界面狀態(tài)的model.還拿JTable 來(lái)說(shuō)就是: TableModel 與
TableColumnModel.
在很多地方看到都說(shuō)swing的這種MVC的劃分多被科學(xué)家欣賞,這我就不能茍同了,我是普通人,不過(guò)我也很欣賞.swing高雅而又不失實(shí)用.
當(dāng)然也有人會(huì)說(shuō)盡管swing的MVC很精彩,不過(guò)通常我們程序中model都不是僅僅對(duì)應(yīng)在一個(gè)GUI元素上,甚至不能確定要對(duì)應(yīng)在哪些GUI元素上.
定義這樣的類通常仍然很死:
class MyModel implements TableModel,ListModel{
}
我覺(jué)得對(duì)于swing的設(shè)計(jì)沒(méi)有什么錯(cuò),它為每一個(gè)組件期待的model定義了相應(yīng)的接口.但是我們程序當(dāng)中的model又希望更獨(dú)立于GUI.
為了達(dá)到兩全其美,到可以使用Eclipse里面的IAdaptable
機(jī)制.讓你的model具有 IAdaptable能力,這樣你就可以將它隨便適配到哪個(gè)swing model 上.如此的組合真是從頭到腳的靈活性.
還有swing的這種MVC設(shè)計(jì)也促成了swing的可插拔外觀特性.