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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

用GOF模式設(shè)計GUI

2019-11-18 15:21:06
字體:
供稿:網(wǎng)友

  《設(shè)計模式》一書中為面向?qū)ο蟮能浖O(shè)計引入了23個設(shè)計模式。這些模式被廣泛應(yīng)用,但只限于軟件設(shè)計的目標(biāo)領(lǐng)域。我們描述了如何在圖形用戶界面的概念性設(shè)計中使用6個設(shè)計模式。通過使用這些模式,設(shè)計者產(chǎn)生的界面能夠更一致,更好地利用屏幕空間,更輕易使用。

本文展示了用于圖形用戶界面設(shè)計的6個模式(PRototype,Singleton,Adaptor,Composite,Proxy,Strategy),每個模式都起源于GOF中的同名模式。這些模式從Star和Smalltalk的早期工作開始就被廣泛使用。我們用最近的GUI的一些例子來演示這些模式。為了把這些模式應(yīng)用到GUI設(shè)計,我們已經(jīng)把GOF模式從面向?qū)ο蟮能浖O(shè)計領(lǐng)域轉(zhuǎn)換到GUI領(lǐng)域。雖然GOF模式和我們的GUI模式都用了對象,接口,消息等術(shù)語,但我們已經(jīng)把這些術(shù)語翻譯到GUI領(lǐng)域。我們的對象指單個可控的GUI組件,比如一個圖標(biāo),一個對話框,或一個窗口。單個對象可以不止一種表現(xiàn)形式。例如一個文檔在關(guān)閉時可以表現(xiàn)為一個圖標(biāo),而打開時可以是一個窗口。對象擁有一些屬性,比如可編輯文本框,單選按鈕,多選按鈕;對象的行為可以由按鈕,菜單,擊鍵引發(fā)或直接控制這個對象而引發(fā)。一組具有相似屬性和行為的對象形成一類,比如,所有的窗口對象可以歸為窗口類。通過繼續(xù)關(guān)系來捕捉對象之間的細(xì)微差別。類可以分組,例如,所有的目錄窗口可以歸為一類,所有的應(yīng)用窗口可以歸為另一類,而他們都是從窗口類繼續(xù)而來。

這種轉(zhuǎn)變表明了GOF領(lǐng)域和GUI領(lǐng)域的重要區(qū)別。GOF模式可以指對象的實現(xiàn),而GUI模式只是必要地涉及GUI對象的接口。對那些主要和接口有關(guān)的的模式來說(比如代理或原型),區(qū)別很小。對那些主要和封裝有關(guān)的模式來說(比如策略),相對應(yīng)的GUI模式引出了模式的第二層面,比如參數(shù)化和定位對象。

這些模式并不涉及可用性,雖然我們在為可用性而擴展設(shè)計的界面中可以找到這些模式。我們相信這些模式和用戶界面設(shè)計的其他技術(shù)(比如走查法(walkthrough),原型法,metrics,可視化方法(visualisation))是不相關(guān)的,就像軟件開發(fā)中的模式是和其他軟件開發(fā)技術(shù)是不相關(guān)的。相應(yīng)的,GOF模式處于編程語言和和方法學(xué)之間,而這些模式也處在用戶界面指南(用戶界面語言規(guī)格)和用戶界面方法學(xué)之間。

形式和內(nèi)容

本文的大部分內(nèi)容展示了我們識別出的6個GUI模式。這些模式以和GOF書中相對應(yīng)的秩序和方式展示和組織。我們先從創(chuàng)建型模式--原型和單體模式開始,然后展示結(jié)構(gòu)型模式--適配器模式,組合模式,代理模式,然后以行為型模式--策略模式結(jié)尾。本文包含了一個模式列表,而不是一個模式系統(tǒng)或一種模式語言。

因為文章長度上的原因,我們用一種簡化的方式來展示這些模式。每一種模式都有一個名字,從GOF模式相應(yīng)的段落中導(dǎo)出的目的聲明。一個簡短的問題說明描述了模式的動機和應(yīng)用,然后模式所要解決的約束顯式地列出條目。解決方案的結(jié)構(gòu)、參與者、合作者和實現(xiàn)則組合在一個段落中。一幅圖片演示了應(yīng)用中的模式的一個例子,取代了GOF模式中代碼例子。最后,列出了模式的積極和消極后果以及對已知應(yīng)用例子的評論。這種形式把GOF形式中的主要敘述章節(jié)壓縮成兩個短小的段落(問題和解決方案),每個都帶有相關(guān)列表(約束、后果等等)。

大多數(shù)的約束都來自于模式的內(nèi)容,和GOF模式中的約束是同構(gòu)的。這種同構(gòu)是重要的,因為它確保跨領(lǐng)域的解決方案在形式上相似。這些模式同時也參考了GUI設(shè)計領(lǐng)域特有的約束。

? 界面應(yīng)當(dāng)保持一致是GUI設(shè)計領(lǐng)域一個明顯的約束。在OO設(shè)計中,一致性用于解決其他問題,比如可重用性。

? 屏幕資源是重要的,通常是稀缺的資源

? GUI中的對象標(biāo)志意味著一個對象通常只能在屏幕的某個地方出現(xiàn)一次。

相關(guān)模式

假如第一個軟件模式語言確實是關(guān)于界面設(shè)計的,那么這個領(lǐng)域只有如此之少的模式和模式語言是令人吃驚的。工具和語言隱喻已在模式語言中有所描述,雖然語言本身涉及的實現(xiàn)和設(shè)計一樣多。一些模式語言已經(jīng)成文,并用于設(shè)計基于文字的WEB站點和表單式窗口。

ENVOI

我們相信一些GOF模式抓住了面向?qū)ο筌浖O(shè)計深層次的共同特性。本文是一個實驗,想確定這些模式在相關(guān)但又顯著不同的GUI設(shè)計領(lǐng)域是否可行(和有多好)。

GUI 原型(Prototype)創(chuàng)建型對象

目標(biāo) 通過原型的實體來創(chuàng)建指定種類的對象,通過拷貝原型來創(chuàng)建新對象。

問題 GUI支持許多種不同的對象,這些對象的功能不同。用戶需要創(chuàng)建能夠存放他們的數(shù)據(jù)的合適對象。例如,桌面支持幾種不同的文檔類型,比如字處理文檔,電子表格,數(shù)據(jù)庫等。用戶如何創(chuàng)建這些新對象?

約束 GUI原型模式解決了下列外部約束:

? 用戶需要創(chuàng)建不同種類的文檔

? 你不可能預(yù)見到系統(tǒng)中的所有類別

? 對象應(yīng)當(dāng)用一致的方法產(chǎn)生

解決方案 為每一個類創(chuàng)建一個原型對象。讓用戶通過拷貝恰當(dāng)原型的方法來創(chuàng)建新對象。每一個類都應(yīng)當(dāng)理解"拷貝"消息,而且都是從所有用戶對象的(父)類繼續(xù)下來的。

案例 在SELF系統(tǒng)用戶界面中,所有的對象都是通過復(fù)制現(xiàn)有的原型來創(chuàng)建的,并沒有"CREATE"這樣的操作。MACINTOSH 系統(tǒng)7答應(yīng)文檔被標(biāo)志為"信箋板"。當(dāng)用戶打開信箋板時,信箋板被拷貝,然后拷貝被打開。

結(jié)果 GUI 原型模式有下列優(yōu)點和缺點

+ 對所有的可拷貝類來說,用戶可以用同一種方法來創(chuàng)建對象

+ 可以通過增加新原型來增加新類

+ 通過拷貝已經(jīng)初始化過的對象,用戶可以創(chuàng)建他們自己的類

- 用戶也許需要清空新拷貝來的對象中的數(shù)據(jù)

- 用戶也許忘記拷貝對象而偶然直接編輯原型

已知應(yīng)用 原型首先在Sketchpad中使用。模式被顯著地應(yīng)用在Self UI系統(tǒng),MoDE Composer,Macintosh等系統(tǒng)中。我們曾經(jīng)給許多用戶建議象本能一樣地使用原型。

GUI 單體(Singleton)創(chuàng)建型模式

目標(biāo) 確保一個類只有一個實體,同時提供能夠作為全局變量使用

問題 一些類應(yīng)該恰好只有一個實體。例如,代表真實硬件資源的對象,如硬盤,打印機,網(wǎng)絡(luò),非凡的系統(tǒng)對象如垃圾桶,在任何一個GUI中都應(yīng)該只有一個。你該如何治理這些獨一無二的對象呢?

約束 GUI Singleton 模式解決了以下約束:

? 這些對象應(yīng)該只有一個實體。

? 單個實體應(yīng)該能夠輕易找得到。

? 用戶界面應(yīng)當(dāng)一致。

? 屏幕資源是有限的。

解決方案 創(chuàng)建一個Singleton 對象,設(shè)計類使得用戶不能拷貝或刪除對象。GUI啟動時就創(chuàng)建它,把它放到屏幕上(通常是桌面),這樣它總是輕易找到。

案例 WINDOWS95里面的垃圾桶是一個Singleton。它沒有大多數(shù)對象提供的刪除和重命名命令。

結(jié)果 GUI Singleton 模式有如下優(yōu)缺點:

+只有一個單體實體能被創(chuàng)建

+單體很輕易在桌面上找到

+單體具有象其他對象一樣的行為

GUI 適配器(Adaptor)結(jié)構(gòu)型對象

目標(biāo) 把一個類的接口轉(zhuǎn)成使用者期望的接口。,適配器模式讓接口不兼容的類可以協(xié)同工作。

問題 每個接口有他們自己的世界,都有自己的文化,語言,樣式。 使用者經(jīng)常需要保有好幾個世界。例如,當(dāng)使用從GUI桌面繼續(xù)下來的框架應(yīng)用,或從另外一個桌面使用這個桌面。用戶如何使用不兼容接口呢?

約束 GUI Adaptor 模式解決了以下約束:

? 用戶需要使用有不兼容接口的對象

? 你不想改變這個接口

? 用戶界面應(yīng)當(dāng)保持一致

解決方案 創(chuàng)建一個適配器對象,這個對象包容了另一個對象的接口。適配器是有主接口的正常對象,包容了被包含的接口。用戶可以通過適配器與被包容的接口交互。適配器通常還提供了帶外(out-of-band)操作來控制兩個接口之間的連接。

用GOF模式設(shè)計GUI(2)

作者:James Noble 著,cntang 譯 本文選自:UMLChina 2002年12月25日

案例 Window NT 接口可以適配以便在 X Windows 系統(tǒng)下運行(Tektronix菜單條控制適配器)。Windows NT 可以 通過終端模擬器來容納文本式應(yīng)用程序。

結(jié)果 GUI 適配器模式有如下優(yōu)缺點:

+可以通過主接口來使用被包容的接口

+兩個接口都無需改變

+通用適配器可以適配一系列接口,比如所有的文本應(yīng)用程序。

-假如適配器中未遵循主接口的習(xí)慣用法,會導(dǎo)致用戶接口不一致

已知應(yīng)用 大多數(shù)GUI通過終端模擬器來支持文本式應(yīng)用程序。Windows 和Macintosh界面可以適配運行在X系統(tǒng)中,或者相反。網(wǎng)頁瀏覽器把www用戶界面適配到范圍很廣的主界面。

參看 一個老式的包裝器(Wrapper)是這種模式的更通用的形式。

GUI 組合(Composite)結(jié)構(gòu)型對象

目的 把對象組合成樹狀機構(gòu)來代表部分-整體層級。組合模式可以讓用戶統(tǒng)一對待單個對象和對象的組合。

問題 許多GUI對象是由其他GUI對象遞歸組成的。比如,磁盤包含了目錄,目錄又包含其他目錄和文件。用戶應(yīng)該如何操縱這些組合對象?

約束 GUI組合模式解決了如下約束:

? 用戶需要控制整個組合對象

? 用戶需要控制組合對象中的單個部分。

? 用戶界面應(yīng)當(dāng)一致

解決方案 創(chuàng)建能夠遞歸包含其他對象的組合式對象,包括組合對象和原始對象。為所有由原始對象和組合對象共享的操作建立一個共同類。具體對象應(yīng)繼續(xù)于這個類,并擴展以提供它們自己的操作。

案例 在Self UI系統(tǒng)中,任何一個圖形對象都可被組合(嵌入)來創(chuàng)建組合式結(jié)構(gòu)。Window NT 把目錄結(jié)構(gòu)表示成組合對象。

結(jié)果 GUI組合模式有如下優(yōu)缺點:

+用戶既可以操縱整個對象,也可以操縱其中的一部分。

+通用操作的接口是一致的。

-很難把非凡的一部分從整體中獨立出來。

已知應(yīng)用 Macintosh 和Windows95界面使用組合對象來代表目錄結(jié)構(gòu)。MacDraw和許多其他圖像編輯器通過顯式分組和非分組圖形對象來創(chuàng)建組合對象。

GUI 代理(Proxy)結(jié)構(gòu)式對象

目的 提供一個代理或放置地以方便另一個對象來存取。

問題 某些對象從來不在用戶想要的地方。比如,用戶想要存儲目錄結(jié)構(gòu)下很深的一個文件,想讓它很輕易存取。或者用戶希望下載一個網(wǎng)頁,放棄任何包含的圖像而保持文檔結(jié)構(gòu)不變。一個對象如何才能同時出現(xiàn)在兩個地方呢?

約束 GUI代理模式解決了如下約束:

? 用戶想要一個對象同時出現(xiàn)在兩個地方。

? GUI對象識別要求一個對象只能出現(xiàn)在一個地方

? 你不想改變或移動原始對象。

? 原始對象的檢索很困難或很昂貴。

? 用戶界面應(yīng)當(dāng)一致。

解決方案 創(chuàng)建一個代理對象來代表遠(yuǎn)程或昂貴的對象。把代理對象放在你想要放原始對象的地方,但不能讓代理象原始對象一樣操作,而是可視地把代理同原始對象區(qū)別開來。

案例 Wwidows95 快捷方式行為方式象代理一樣,所以一個對象可以出現(xiàn)在桌面的許多個地方。Netscape用圖標(biāo)作為還未下載圖片的代理。

結(jié)果 GUI代理模式有如下的優(yōu)缺點:

+原始對象可以同時出現(xiàn)在兩個地方

+原始對象不需要改變

+通過代理存取原始對象是透明的

+用戶可以區(qū)分原始對象和代理

-假如原始對象不可用,代理也會不可用

已知應(yīng)用 Macintosh 別名和Window95快捷方式的行為方式象放在另外一個地方的遠(yuǎn)程代理。Netscape使用圖標(biāo)作為還未下載 的圖像的虛擬代理。許多網(wǎng)頁使用縮略圖來作為大圖的代理。

參看 《面向模式的軟件體系結(jié)構(gòu)》一書也描述了代理模式。

GUI 策略(Strategy)行為式對象

目的 定義一個算法家族,并使它們可以互換。

問題 一個對象使用幾種算法,每個都有自己的接口和客戶參數(shù)設(shè)置。用戶需要為它們選擇的算法設(shè)置參數(shù)。例如,一個屏保程序提供了幾種不同的顯示算法(文本,二維圖像,三維圖像)每個都有自己的參數(shù)(要顯示的文本,顏色,紋理,三維對象)。 用戶如何處理這些不同的算法呢?

約束 GUI 策略模式解決了如下約束:

? 一個對象需要不同參數(shù)的不同算法

? 用戶應(yīng)該選擇算法和其參數(shù)

? 用戶界面應(yīng)當(dāng)一致。

? 屏幕資源有限

解決方案 創(chuàng)建一個獨立的策略對象來代表每一個算法,把每種算法的參數(shù)作為策略對象的屬性。讓策略對象從屬于使用算法的對象。用戶可以通過主對象選擇一種算法,然后通過和策略對象交互來設(shè)定算法的參數(shù)。

案例 Windows NT 使用策略對象來設(shè)置屏保應(yīng)用程序的參數(shù)。

結(jié)果 GUI策略模式有如下的優(yōu)缺點:

+ 策略對象顯式代表了不同的算法

+用戶可以選擇一種算法和設(shè)置算法的參數(shù)

+在提供一個策略對象的同時保留資源

-改變策略對象也許使界面一致性變差

-接口包含了逐漸增長的對象。

已知應(yīng)用 Windows NT使用策略對象來為打印機驅(qū)動程序設(shè)置參數(shù),同樣還有屏保。PaintShop Pro 和 XV使用策略對象來設(shè)置文件轉(zhuǎn)換算法的參數(shù)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 电白县| 碌曲县| 灯塔市| 蕲春县| 枣强县| 泰顺县| 滁州市| 德安县| 邹城市| 麻城市| 滨海县| 银川市| 神木县| 龙口市| 剑川县| 永和县| 鄄城县| 南川市| 佛教| 廊坊市| 连云港市| 闵行区| 会昌县| 松潘县| 乌海市| 磴口县| 牟定县| 紫金县| 孟州市| 黑河市| 红桥区| 台江县| 河池市| 阿鲁科尔沁旗| 杭州市| 龙南县| 余姚市| 白城市| 鄄城县| 龙岩市| 额尔古纳市|