自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解MVC設(shè)計(jì)模式與Swing

開發(fā) 后端
本文介紹詳解MVC設(shè)計(jì)模式與Swing,包括介紹MVC設(shè)計(jì)模式把一個(gè)軟件組件區(qū)分為三個(gè)不同的部分和MVC設(shè)計(jì)模式通常的用法。

一個(gè)好的用戶界面(GUI)的設(shè)計(jì)通??梢栽诂F(xiàn)實(shí)世界找到相應(yīng)的表現(xiàn)。例如,如果在您的面前擺放著一個(gè)類似于電腦鍵盤按鍵的一個(gè)簡(jiǎn)單的按鈕,然而就是這么簡(jiǎn)單的一個(gè)按鈕,我們就可以看出一個(gè)GUI設(shè)計(jì)的規(guī)則,它由兩個(gè)主要的部分構(gòu)成,一部分使得它具有了按鈕應(yīng)該具有的動(dòng)作特性,例如可以被按下。另外一部分則負(fù)責(zé)它的表現(xiàn),例如這個(gè)按鈕是代表了A還是B。

看清楚這兩點(diǎn)你就發(fā)現(xiàn)了一個(gè)很強(qiáng)大的設(shè)計(jì)方法,這種方法鼓勵(lì)重用reuse,而不是重新設(shè)計(jì)redesign。你發(fā)現(xiàn)按鈕都有相同的機(jī)理,你只要在按鈕的頂上噴上不同的字母便能制造出“不同”的按鈕,而不用為了每個(gè)按鈕而重新設(shè)計(jì)一份圖紙。這大大減輕了設(shè)計(jì)工作的時(shí)間和難度。

如果您把上述設(shè)計(jì)思想應(yīng)用到軟件開發(fā)領(lǐng)域,那么取得相似的效果一點(diǎn)都不讓人驚奇。一個(gè)在軟件開發(fā)領(lǐng)域應(yīng)用的非常廣泛的技術(shù)Model/View/Controller(MVC)便是這種思想的一個(gè)實(shí)現(xiàn)。

這當(dāng)然很不錯(cuò),但是或許您又開始疑惑這和java基礎(chǔ)類JFC(Java Foundation Class)中的用戶界面設(shè)計(jì)部分(Swing)又有什么關(guān)系呢?好的,我來(lái)告訴你。

盡管MVC設(shè)計(jì)模式通常是用來(lái)設(shè)計(jì)整個(gè)用戶界面(GUI)的,JFC的設(shè)計(jì)者們卻獨(dú)創(chuàng)性的把這種設(shè)計(jì)模式用來(lái)設(shè)計(jì)Swing中的單個(gè)的組件(Component),例如表格Jtable,樹Jtree,組合下拉列表框JcomboBox等等等等。這些組件都有一個(gè)Model,一個(gè)View,一個(gè)Controller,而且,這些model,view,controller可以獨(dú)立的改變,就是當(dāng)組件正在被使用的時(shí)候也是如此。這種特性使得開發(fā)GUI界面的工具包顯得非常的靈活。

MVC設(shè)計(jì)模式
就象我剛才指出的一樣,MVC設(shè)計(jì)模式把一個(gè)軟件組件區(qū)分為三個(gè)不同的部分,model,view,controller。

MVC設(shè)計(jì)模式把一個(gè)軟件組件區(qū)分為三個(gè)不同的部分

MVC設(shè)計(jì)模式把一個(gè)軟件組件區(qū)分為三個(gè)不同的部分


Model是代表組件狀態(tài)和低級(jí)行為的部分,它管理著自己的狀態(tài)并且處理所有對(duì)狀態(tài)的操作,model自己本身并不知道使用自己的view和controller是誰(shuí),系統(tǒng)維護(hù)著它和view之間的關(guān)系,當(dāng)model發(fā)生了改變系統(tǒng)還負(fù)責(zé)通知相應(yīng)的view。

View代表了管理model所含有的數(shù)據(jù)的一個(gè)視覺上的呈現(xiàn)。一個(gè)Model可以有一個(gè)以上的View,但是Swing中卻很少有這樣的情況。

Controller管理著model和用戶之間的交互的控制。它提供了一些方法去處理當(dāng)model的狀態(tài)發(fā)生了變化時(shí)的情況。

使用鍵盤上的按鈕的例子來(lái)說(shuō)明一下:Model就是按鈕的整個(gè)機(jī)械裝置,View/Controller就是按鈕的表面部分。

下面的圖解釋了如何把一個(gè)JFC開發(fā)的用戶界面分為model,view,controller,注意,view/Controller被合并到了一起,這是MVC設(shè)計(jì)模式通常的用法,它們提供了組件的用戶界面(UI)。

MVC設(shè)計(jì)模式通常的用法

MVC設(shè)計(jì)模式通常的用法


用Button的例子詳細(xì)說(shuō)明

為了更好的理解MVC設(shè)計(jì)模式和Swing用戶界面組件之間的關(guān)系,讓我們更加深入的進(jìn)行分析。我將采用最常見的組件button來(lái)說(shuō)明。

我們從model來(lái)開始。

Model
一個(gè)按鈕的model所應(yīng)該具備的行為由一個(gè)接口ButtonModel來(lái)完成。一個(gè)按鈕model實(shí)例封裝了其內(nèi)部的狀態(tài),并且定義了按鈕的行為。它的所有方法可以分為四類:
◆查詢內(nèi)部狀態(tài)
◆操作內(nèi)部狀態(tài)
◆添加和刪除事件監(jiān)聽器
◆發(fā)生事件

其他的用戶界面組件有它們各自的與組件相關(guān)的Model,但是所有的組件Model都提供這四類方法。

View & Controller
上面的圖中講述一個(gè)按鈕的view/controller由一個(gè)接口ButtonUI完成。如果一個(gè)類實(shí)現(xiàn)了這個(gè)接口,那么它將會(huì)負(fù)責(zé)創(chuàng)建一個(gè)用戶界面,處理用戶的操作。它的所有方法可以被分為三大類:
◆繪制Paint
◆返回幾何類型的信息
◆處理AWT事件

其他用戶界面組件有他們自己的組件相關(guān)的View/Controller,但是他們都提供上述三類方法。

程序員通常并不會(huì)直接和model以及view/controller打交道,他們通常隱藏于那些繼承自java.awt.Component的組件里面了,這些組件就像膠水一樣把MVC三者合三為一。也正是由于這些繼承的組件對(duì)象,一個(gè)程序員可以很方便的混合使用Swing組件和AWT組件,然后,我們知道,Swing組件有很多都是直接繼承自相應(yīng)的AWT組件,它能提供比AWT組件更加方便易用的功能,所以通常情況下,我們沒有必要混合使用兩者。

【編輯推薦】

  1. 介紹學(xué)習(xí)Swing AWT
  2. 透視Synth與Swing的外觀
  3. TikeSwing創(chuàng)建MVC體系結(jié)構(gòu)
  4. 對(duì)Java Swing經(jīng)驗(yàn)的討論
  5. JFC和Swing中的JLabel組件
責(zé)任編輯:佚名 來(lái)源: 中國(guó)IT實(shí)驗(yàn)室
相關(guān)推薦

2009-07-17 14:57:41

SwingWorkerSwing程序

2011-06-02 18:02:50

iPhone MVC

2021-06-29 08:54:23

設(shè)計(jì)模式代理模式遠(yuǎn)程代理

2010-06-11 14:55:20

2012-05-09 10:09:18

JavaMEJava

2009-08-18 11:03:31

Observer設(shè)計(jì)模

2021-12-27 09:20:13

事務(wù)模式隔離

2009-07-15 18:11:17

MVC模式學(xué)習(xí)

2011-07-26 17:31:52

iOS 設(shè)計(jì)模式

2011-07-26 15:29:36

Cocoa 模式

2011-04-21 09:46:41

設(shè)計(jì)模式

2014-04-14 05:31:08

WindowsPhonWP8MVC

2011-11-23 14:03:54

JavaSSHMVC

2011-04-22 09:26:57

MVC設(shè)計(jì)

2009-07-16 16:09:51

Swing全屏幕模式

2010-01-21 09:08:53

.NET設(shè)計(jì)模式

2009-07-10 12:30:12

Swing組件

2009-07-09 11:55:17

Swing模型過(guò)濾

2012-08-30 09:07:33

設(shè)計(jì)模式

2023-07-03 07:39:43

Spring框架設(shè)計(jì)模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)