用GOF模式設(shè)計(jì)GUI(3)

字號(hào):

案例 在Self UI系統(tǒng)中,任何一個(gè)圖形對(duì)象都可被組合(嵌入)來(lái)創(chuàng)建組合式結(jié)構(gòu)。Window NT 把目錄結(jié)構(gòu)表示成組合對(duì)象。
      
    結(jié)果 GUI組合模式有如下優(yōu)缺點(diǎn):
    +用戶(hù)既可以操縱整個(gè)對(duì)象,也可以操縱其中的一部分。
    +通用操作的接口是一致的。
    -很難把特殊的一部分從整體中獨(dú)立出來(lái)。
    已知應(yīng)用 Macintosh 和Windows95界面使用組合對(duì)象來(lái)代表目錄結(jié)構(gòu)。MacDraw和許多其他圖像編輯器通過(guò)顯式分組和非分組圖形對(duì)象來(lái)創(chuàng)建組合對(duì)象。
    GUI 代理(Proxy)結(jié)構(gòu)式對(duì)象
    目的 提供一個(gè)代理或放置地以方便另一個(gè)對(duì)象來(lái)存取。
    問(wèn)題 某些對(duì)象從來(lái)不在用戶(hù)想要的地方。比如,用戶(hù)想要存儲(chǔ)目錄結(jié)構(gòu)下很深的一個(gè)文件,想讓它很容易存取?;蛘哂脩?hù)希望下載一個(gè)網(wǎng)頁(yè),放棄任何包含的圖像而保持文檔結(jié)構(gòu)不變。一個(gè)對(duì)象如何才能同時(shí)出現(xiàn)在兩個(gè)地方呢?
    約束 GUI代理模式解決了如下約束:
    · 用戶(hù)想要一個(gè)對(duì)象同時(shí)出現(xiàn)在兩個(gè)地方。
    · GUI對(duì)象識(shí)別要求一個(gè)對(duì)象只能出現(xiàn)在一個(gè)地方
    · 你不想改變或移動(dòng)原始對(duì)象。
    · 原始對(duì)象的檢索很困難或很昂貴。
    · 用戶(hù)界面應(yīng)當(dāng)一致。
    解決方案 創(chuàng)建一個(gè)代理對(duì)象來(lái)代表遠(yuǎn)程或昂貴的對(duì)象。把代理對(duì)象放在你想要放原始對(duì)象的地方,但不能讓代理象原始對(duì)象一樣操作,而是可視地把代理同原始對(duì)象區(qū)別開(kāi)來(lái)。