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