国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

通過Java Swing看透MVC設計模式

2019-11-18 15:45:31
字體:
來源:轉載
供稿:網友

  一個好的用戶界面(GUI)的設計通常可以在現實世界找到相應的表現。
例如,假如在您的面前擺放著一個類似于電腦鍵盤按鍵的一個簡單的按鈕,然而就是這么簡單的一個按鈕,我們就可以看出一個GUI設計的規則,它由兩個主要的部分構成,一部分使得它具有了按鈕應該具有的動作特性,例如可以被按下。另外一部分則負責它的表現,例如這個按鈕是代表了A還是B。

  看清楚這兩點你就發現了一個很強大的設計方法,這種方法鼓勵重用reuse,而不是重新設計redesign。你發現按鈕都有相同的機理,你只要在按鈕的頂上噴上不同的字母便能制造出“不同”的按鈕,而不用為了每個按鈕而重新設計一份圖紙。這大大減輕了設計工作的時間和難度。

  假如您把上述設計思想應用到軟件開發領域,那么取得相似的效果一點都不讓人驚異。一個在軟件開發領域應用的非常廣泛的技術Model/View/Controller(MVC)便是這種思想的一個實現。

  這當然很不錯,但是或許您又開始迷惑這和java基礎類JFC(Java Foundation Class)中的用戶界面設計部分(Swing)又有什么關系呢?好的,我來告訴你。

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

  MVC設計模式把一個軟件組件區分為三個不同的部分,model,view,controller。

  Model是代表組件狀態和低級行為的部分,它治理著自己的狀態并且處理所有對狀態的操作,model自己本身并不知道使用自己的view和controller是誰,系統維護著它和view之間的關系,當model發生了改變系統還負責通知相應的view。

  View代表了治理model所含有的數據的一個視覺上的呈現。一個Model可以有一個以上的View,但是Swing中卻很少有這樣的情況。

  Controller治理著model和用戶之間的交互的控制。它提供了一些方法去處理當model的狀態發生了變化時的情況。

  使用鍵盤上的按鈕的例子來說明一下:Model就是按鈕的整個機械裝置,View/Controller就是按鈕的表面部分。

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

  用Button的例子具體說明

  為了更好的理解MVC設計模式和Swing用戶界面組件之間的關系,讓我們更加深入的進行分析。我將采用最常見的組件button來說明。

  我們從model來開始。

  Model

  一個按鈕的model所應該具備的行為由一個接口ButtonModel來完成。一個按鈕model實例封裝了其內部的狀態,并且定義了按鈕的行為。它的所有方法可以分為四類:

  1、查詢內部狀態

  2、操作內部狀態

  3、添加和刪除事件監聽器

  4、發生事件

通過Java Swing看透MVC設計模式(圖一) 法。

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

  現在我們已經明白了Java類與MVC各個部分的對應關系,我們可以更加深入一點去分析問題了。下面我們將要講述一個小型的使用MVC模式開發的例子。因為JFC十分的復雜,我只能把我的例子局限于一個用戶界面組件里面(假如你猜是一個按鈕的例子,那么你對了!)

  讓我們來看看這個例子的所有部分吧。

  Button類

  最顯而易見的開始的地方就是代表了按鈕組件本省的代碼,因為這個類是大部分程序員會接觸的。

  就像我前面提到的,按鈕用戶界面組件類實際上就是model和view/controller的之間的黏合劑。每個按鈕組件都和一個model以及一個controller關聯,model定義了按鈕的行為,而view/controller定義了按鈕的表現。而應用程序可以在任何事件改變這些關聯。讓我們看看得以實現此功能的代碼。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河西区| 宣化县| 大渡口区| 新巴尔虎右旗| 菏泽市| 邹城市| 宿州市| 盐津县| 溧水县| 宁城县| 柳州市| 武义县| 甘肃省| 盐边县| 波密县| 汉沽区| 越西县| 中西区| 崇义县| 彰化县| 石城县| 彭山县| 龙山县| 道真| 丹凤县| 扬中市| 美姑县| 华容县| 林甸县| 遂平县| 栾城县| 邵武市| 平和县| 海原县| 三穗县| 新竹县| 道真| 彩票| 区。| 双流县| 永州市|