posted @ 2006-09-12 23:36 JavaExplore 閱讀(6562) | 評論 (15) | 編輯 收藏
2、狀態(tài):和策略非常接近,使用于有明顯狀態(tài)變化的時候
3、命令:命令的發(fā)起與執(zhí)行解藕,命令類可以獨立演化,有助于做redo undo操作以及記錄所執(zhí)行的命令
4、解釋:用于文法的解析
5、迭代子:java中有現(xiàn)成的實現(xiàn),iterator
6、觀察者:常見,類似與模型視圖的關(guān)系,java中提供了oberver類和observable接口
7、調(diào)停者:處理混亂的類交互,抽象出中間類,將類間的交互都通過這個類完成
8、模版:將擁有同一父類的多個具體子類的共同操作提取出來形成抽象模版類
???????? 原則:具體的私有屬性應(yīng)該放到具體類中,抽象類中調(diào)用屬性通過屬性方法而不是直接調(diào)用屬性
?????????????? 將私有屬性放到具體的類中,才能方便對父類進行多個實現(xiàn)。
???????? 將行為看作劃分類的標準,以前我都是將數(shù)據(jù)模型看作劃分類的思想,以后應(yīng)該重新審視行為在類中的重要作用,特別是在的繼承等級中。
posted @ 2006-09-12 23:33 JavaExplore 閱讀(387) | 評論 (0) | 編輯 收藏
1 簡介
JFreeChart 是 SourceForge.net 上的一個開源項目,它的源碼和 API 都可以免費獲得。 JFreeChart 的功能非常強大,可以實現(xiàn)餅圖 ( 二維和三維 ) , 柱狀圖 ( 水平 , 垂直 ), 線圖 , 點圖 , 時序圖 , 甘特圖 , 股票行情圖 , 混和圖 , 溫度計圖 , 刻度圖等常用商用圖表, 圖形可以導出成 PNG 和 JPEG 格式,同時還可以與 PDF 和 EXCEL 關(guān)聯(lián),支持對圖形的放大、縮小,支持常見圖形的 3D 顯示。
2 圖形 對象的處理
2 .1 JFreeChart對象
JFreeChart 可以生成很多圖形對象,它的工廠類提供了 33 個工廠方法用于生成不同的圖形對象(具體的工廠方法可以參見 JFreeChart 的 API 手冊或者源碼中的 ChartFactory 類 )。 JFreechart 對圖形對象的抽象具體化。圖形對象( JFreeChart ),由 Title( 主標題 ) , SubTitle (子標題 ) , Plot (圖形的繪制結(jié)構(gòu))等幾個主要對象組成。各個組成部分如下圖所示:
這是一個 JFreeChart 對象,上面的“ chart 標題”是 Title 對象,中間區(qū)域是 Plot 對象(包括繪圖區(qū)域和坐標軸區(qū)域),下面的區(qū)域是 LegendTitle 對象,是一種 SubTitle 對象。
每個 JFreeChart 對象只能有 1 個 Title 對象, 1 個 Plot 對象,可以有多個 SubTitle 對象。 JFreeChart 對象可以進行的操作有:背景的設(shè)置(背景顏色、背景圖片、透明度等)、邊框的設(shè)置(是否可見、筆畫、 Paint 等)、渲染方式的設(shè)置、標題對象的設(shè)置、子標題對象的增刪查操作。(本文中的所有操作都不提供代碼級的介紹,可參見 API 手冊或者源碼)
2 .2 主標題對象
主標題對象是 TextTitle 類型,可以進行的操作有:背景設(shè)置、字體設(shè)置(字體類型、顏色、內(nèi)容、對齊方式等操作)、 tooltip 設(shè)置、 URL 設(shè)置。
2 .3 Plot 對象
Plot 對象是圖形的繪制結(jié)構(gòu)對象。 JFreeChart 中含有很多不同的 Plot 對象,每一種圖形對象中的 Plot 對象都在實例化的時候創(chuàng)建。所有的 Plot 共有的操作有:背景設(shè)置(背景顏色、背景圖片、透明度等)、前景透明度設(shè)置、無數(shù)據(jù)存在情況的設(shè)置(顯示的字符內(nèi)容、顯示的字體、顯示的 Paint )、放大縮小比例的設(shè)置,大部分 Plot 對象還有設(shè)置 Datset 、設(shè)置 Renderer 對象操作。
JFreeChart 中有 18 種 Plot 抽象類的具體實現(xiàn)類。 Plot 的具體實現(xiàn)類主要由以下重要對象組成: Renderer 對象(圖形的繪制單元——繪圖域) Datset (圖形的數(shù)據(jù)源), DomainAxis (區(qū)域軸,相當于 x 軸), RangeAxis (范圍軸,相當于 y 軸)。不同的 Plot 對象組成方式不盡相同,有的不含有 Renderer 對象,比如 CompassPlot 、 ContourPlot 、 MultiplePiePlot 、 PiePlot 等,有的不含有 DomainAxis 、 RangeAxis 對象,另外除了 FastScatterPlot 類都含有 Datset 對象, FastScatterPlot 使用 float 的二維數(shù)組充當數(shù)據(jù)源。尤其說明一點,餅狀圖相關(guān)的 Plot 對象( MultiplePiePlot 、 PiePlot 、 PiePlot3D 、 RingPlot )中都不含有 Renderer 對象、 DomainAxis 對象、 RangeAxis 對象。
一般來說, Datset 對象存儲數(shù)據(jù)模型, Renderer 對象存儲顯示模型, Plot 對象根據(jù) Datset 對象、 Renderer 對象完成畫圖操作。
仍以上面的圖形講解 Plot 對象的組成。
上圖的中間區(qū)域是是一個 XYPlot 對象。其中的折線部分即是圖形的繪制單元 Renderer 對象。 X 軸是 DomainAxis , y 軸是 RangeAxis ,其中 Datset 對象屬于數(shù)據(jù)模型范疇,是 UI 不可見對象。該圖中的 plot 背景色、網(wǎng)格線的各種設(shè)置可以通過 XYPlot 對象本身完成。
下面講解 Renderer 對象、 Axis 對象( X 軸、 y 軸都屬于 Axis 對象), Datset 對象在后續(xù)章節(jié)中專門講解。
2 .3.1 Renderer對象
Renderer 對象是圖形的繪制單元。 JFreeChart 提供了兩個接口 CategoryItemRenderer 和 XYItemRenderer 、 1 個抽象類 AbstractRenderer 供具體的 Renderer 類實現(xiàn),給出了將近 50 種具體實現(xiàn)類。
一般來說 Renderer 對象可進行的操作有:對 item label (下圖中的柱狀圖上的紅色數(shù)字即為 item label 的示例)的默認設(shè)置( item label 的產(chǎn)生方式、是否可見、字體、 Paint 、正反向 item label 的位置設(shè)置等)、繪制圖形的邊框默認設(shè)置( Paint 、筆畫、是否可見等)、繪制圖形的默認設(shè)置(形狀、筆畫、是否可見、對應(yīng)的圖例中是否可見等,折線圖還有線條是否可見、折點圖形是否可見、折點圖形是否填充、折點圖形的形狀、對應(yīng)的圖例中線條是否可見、圖形是否可見、整體是否可見等)、以及對指定 item label 的設(shè)置、指定繪制圖形的設(shè)置。可以說和具體繪制的圖形相關(guān)的屬性都可以通過 Renderer 對象設(shè)置。
不同的 Renderer 的實現(xiàn)類實現(xiàn)了不同的顯示方式,在含有 Renderer 對象的 JFreeChart 對象中, R enderer 對象決定了JFreeChart對象的顯示方式。例如:柱狀圖的Plot對象中默認的Renderer對象是 CategoryItemRenderer 對象,通過設(shè)置 Plot 對象的Renderer對象 為 LineAndShapeRenderer ,則柱狀圖變?yōu)榫€圖。使用中一般不需要顯式的實例化一個 R enderer 對象,一般通過 JFreeChart 對象的 Plot 對象調(diào)用現(xiàn)有的 R enderer 對象進行重新設(shè)置等操作。
2 .3.2 Axis對象
JFreeChart 提供了兩種類型的坐標軸: CategoryAxis (等級軸)和 ValueAxis (值軸), ValueAxis 又有 3 個子類: DateAxis (時間軸)、 NumberAxis (數(shù)字軸)、 PeriodAxis (時期軸)。這些坐標軸還有更詳細的子類,不再一一列舉
Axis 對象可進行的操作有:標題的設(shè)置(內(nèi)容、字體、Paint、顯示角度等)、坐標線的設(shè)置(筆畫、Paint、是否可見等)、刻度線的設(shè)置(是否可見、筆畫、Paint、位于繪圖區(qū)域的長度、位于繪圖區(qū)域外的長度等)、刻度標示的設(shè)置(筆畫、Paint、字體、與軸的距離等)、坐標軸范圍設(shè)置等。
CategoryAxis 對象還可以進行的操作有: 刻度標示間距 設(shè)置( 最小間距、最大間距、指定間距)等。
ValueAxis 對象可進行的操作有:軸端設(shè)置(顯示的圖形形狀)、范圍設(shè)置(是否自動產(chǎn)生范圍、自動產(chǎn)生的最小范圍、最大范圍、指定確定范圍、指定范圍大小等)、間隔設(shè)置(是否自動產(chǎn)生間隔、指定間隔)等。
DateAxis 對象還有對時間刻度顯示格式的設(shè)置操作。
2 . 4 子標題對象
子標題對象是 Title 類型的對象,一個JFreeChart可以有多個子標題對象。JFreeChart提供了5種Title的實現(xiàn),可以是圖片、文本、圖例等的形式。
(數(shù)據(jù)源以及常用圖形的處理以及進一步的討論在后續(xù)文章中介紹)
posted @ 2006-09-01 23:21 JavaExplore 閱讀(9955) | 評論 (1) | 編輯 收藏
1、代理模式:參與角色:代理與真實實體共同的抽象角色、代理角色、真實實體角色
?????? 遠程代理:封裝對與遠程對象復雜的調(diào)用通訊過程,象調(diào)用本地對象一樣
?????? 虛擬代理:真實實體加載時間過長的,使用虛擬代理提供友好的顯示方式,一邊加載實際的對象
?????? 安全代理:調(diào)用真實的對象之前插入權(quán)限驗證模塊
?????? 智能引用代理:調(diào)用真實的對象之后調(diào)用統(tǒng)計等相關(guān)操作模塊
2、享元模式:參與對象:建造工廠、抽象享元、具體享元
?????? 分析對象的內(nèi)蘊與外蘊狀態(tài),即不變的私有屬性與變化的私有屬性。建造工廠使用備忘錄模式存儲已經(jīng)建造的對象,建造對象的時候,以參數(shù)的形式傳遞享元對象的內(nèi)蘊屬性。實際調(diào)用中,使用傳遞外部參數(shù)的方法使用外蘊變量。
?? 復合的享元對象組成的對象,不可以整體使用享元模式,但可以單個的享元對象屬性使用該模式
?? 優(yōu)點:降低內(nèi)存中的對象? 缺點:設(shè)計復雜性
???????
3、門面模式:結(jié)構(gòu)模式。為包含有很多對象的子系統(tǒng)提供統(tǒng)一的操作接口類,所有對該子系統(tǒng)的調(diào)用都通過這個類,降低子系統(tǒng)之間調(diào)用的復雜度,也符合笛比特法則(一個對象的朋友盡量少,只與朋友說話)
4、橋梁模式:參與角色:抽象化角色、抽象化的具體角色、實現(xiàn)化角色、實現(xiàn)化的具體角色
?兩個有繼承等級的對象群,一個對象群對另一個對象群有調(diào)用關(guān)系的時候使用
??????? 目的:使抽象化與實現(xiàn)化解藕
posted @ 2006-09-01 23:08 JavaExplore 閱讀(736) | 評論 (0) | 編輯 收藏