這是一個目前最好的一個開源分頁標(biāo)簽的實(shí)現(xiàn)---extremeTable標(biāo)簽。今天談?wù)勊?/span>Limit的設(shè)計(jì)架構(gòu)思想。
這個設(shè)計(jì)很通用,經(jīng)過作者的多次重構(gòu),現(xiàn)在extremeTable的架構(gòu)非常漂亮。這個標(biāo)簽現(xiàn)在缺點(diǎn)是有些參數(shù)對mvc控制器屏蔽了,應(yīng)提供一致的對外接口。不過整體上設(shè)計(jì)還是很精致的,面向?qū)ο髞硖幚?html元素,與spring非常的默契,非常便于開發(fā)和測試。
類圖關(guān)系

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