這是一個目前最好的一個開源分頁標簽的實現(xiàn)---extremeTable標簽。今天談談它的Limit的設計架構思想。
這個設計很通用,經(jīng)過作者的多次重構,現(xiàn)在extremeTable的架構非常漂亮。這個標簽現(xiàn)在缺點是有些參數(shù)對mvc控制器屏蔽了,應提供一致的對外接口。不過整體上設計還是很精致的,面向對象來處理 html元素,與spring非常的默契,非常便于開發(fā)和測試。
類圖關系

1, 工廠LimitFactory
TableLimitFactory,AbstractLimitFactory,LimitFactory
TableLimitFactory是最終實現(xiàn)的工廠,它extends了AbstractLimitFactory抽象類,AbstractLimitFactory 類implements了LimitFactory接口。
TableLimitFactory主要是用來實例化,通過構造函數(shù)傳入?yún)?shù)。同時創(chuàng)建Registry來完成jsp頁面參數(shù)傳入Registry。當然還有一個功能就是從web.xml的配置文件讀取一些全局參數(shù)。首先讀取配置文件參數(shù),然后根據(jù)參數(shù)創(chuàng)建LimitRegistry對象。
this.registry = new LimitRegistry(context, tableId, prefixWithTableId, state, stateAttr);
AbstractLimitFactory主要是用來獲取jsp頁面上設置的參數(shù),比如分頁的信息(第幾頁,起始行,結束行,每頁顯示行數(shù),查詢條件,排序條件等),當然他是通過工具類Registry來實現(xiàn)。
2, Limit
TableLimit,Limit。其主要作用是一個參數(shù)參數(shù)器,就是把Registry對象的參數(shù)傳入TableLimit,考慮到分層吧,TableLimit是該標簽和action通信的橋梁。就像我們的j2ee項目vo是dao和struts等view等數(shù)據(jù)傳輸工具。
3, Preferences
TableProperties,Properties 主要是來實現(xiàn)從web.xml配置的文件中讀取配置的一些全局參數(shù)。
InputStream input = this.getClass().getResourceAsStream(preferencesLocation);
if (input != null) {
properties.load(input);
}
其中preferencesLocation是路徑,在TableLimitFactory初始化時候,通過工具類TableModelUtils.getPreferencesLocation(context)獲取。
這個設計也是大多數(shù)需要配置文件的系統(tǒng)常用的方法。
4, Registry
LimitRegistry,AbstractRegistry,Registry
這個體系結構和上面的工廠模式一樣,就是LimitRegistry主要是用來實例化,通過構造函數(shù)傳入?yún)?shù)。AbstractRegistry是實際實現(xiàn)類,獲取jsp表單提交的參數(shù),并提供getter方法供Limit來使用。Registry是一個接口。
所以這設計模式,我們可以來學習,
經(jīng)典表述:類—抽象類—接口
l 類:初始化,定義構造函數(shù),傳入?yún)?shù)。
l 抽象類:定義業(yè)務方法在此。
l 接口:定義接口方法,這個不用多說。
(作者:asktalk 來自 http://www.aygfsteel.com/askltak 原創(chuàng)文章,轉載請注明出處)
posted @ 2007-12-26 16:17 Asktalk 閱讀(4611) | 評論 (5) | 編輯 收藏