作者:Cay Horstmann
譯者:Xiao Jia(賈梟)
2002 年,我寫了一本關(guān)于面向?qū)ο笤O(shè)計與模式的本科教材 [Hor05]。和很多書一樣,這本書也源于我對經(jīng)典課程的沮喪。一般來說,計算機科學(xué)專業(yè)的學(xué)生,會在他們的第一門編程課上,學(xué)習(xí)如何設(shè)計一個獨立的類。而此后,直到在高年級的軟件工程課中,他們才在面向?qū)ο笤O(shè)計方面接受更多的訓(xùn)練。在這門課程中,學(xué)生在幾個星期內(nèi)匆忙地學(xué)習(xí) UML 和設(shè)計模式,最終也只是走馬觀花。我寫的這本書是為一個學(xué)期的課程準(zhǔn)備的,學(xué)生需要具備一些 Java 編程和基本數(shù)據(jù)結(jié)構(gòu)的知識(通常這些知識來自基于 Java 的 CS1 或 CS2 課程安排)。這本書在學(xué)生所熟悉的上下文中涵蓋了面向?qū)ο笤O(shè)計原則和設(shè)計模式的內(nèi)容。比如用 Swing 里面的?JScrollPane
?類來介紹修飾模式(Decorator Pattern),目的是希望這個例子比經(jīng)典的 Java 流的例子①更容易讓人記住。
① 譯者注:如?
FileInputStream
?和?BufferedInputStream
?等。
Ald02] 和 JUNG ?。然而,這些框架都相當(dāng)復(fù)雜,提供的也只是“用來繪制圖形”的框架,而不是“用來繪制圖形的應(yīng)用程序”的框架。
在客戶端 Java 的鼎盛時期,人們制定了 JavaBeans 規(guī)范,用來給在可視化 GUI 設(shè)計環(huán)境里編輯 GUI 組件提供可移植的機制。其目的是為了讓一個第三方的 GUI 組件可以放在任意的 GUI 設(shè)計器中,并且它的屬性可以像按鈕、文本等標(biāo)準(zhǔn)組件一樣進(jìn)行設(shè)置。
Java 語言本身沒有對屬性的原生支持。JavaBeans 屬性可以從成對的 getter 和 setter 方法中發(fā)現(xiàn)出來,或者通過相應(yīng)的?BeanInfo
?類指定。進(jìn)一步地,可以指定?屬性編輯器?來可視化地編輯屬性的值。JDK 甚至包含了一些基本的屬性編輯器,比如用來編輯?java.awt.Color
?類型的編輯器。
Violet 框架充分利用了 JavaBeans 規(guī)范。比如,CircleNode
?類可以通過提供如下兩個方法,來暴露出顏色這一屬性:
public void setColor(Color newValue)
public Color getColor()
現(xiàn)在,不需要任何額外的工作,這個圖形編輯器就能編輯圓圈節(jié)點的顏色了(參見圖 22.5)。
更多建議: