asp.net SAF 中緩存服務(wù)的實(shí)現(xiàn)第2/5頁(yè)
更新時(shí)間:2008年08月08日 21:28:49 作者:
對(duì)緩存的興趣源于張子陽(yáng)寫的一篇文章《SAF 中緩存服務(wù)的實(shí)現(xiàn)》中的一個(gè)例子:
類型接口
我們先看一下類型的組織,然后再看實(shí)現(xiàn)。
ICacheStrategy用于定義如何添加、獲取、刪除欲進(jìn)行緩存的對(duì)象。實(shí)際上,在接口的實(shí)體類中要明確使用何種類型來(lái)存儲(chǔ)對(duì)象,是Dictionary還是Hashtable或者其他。
C#
復(fù)制代碼 代碼如下:
public interface ICacheStrategy {
void AddItem(string key, object obj);// 添加對(duì)象
object GetItem(string key); // 獲取對(duì)象
void RemoveItem(string key); // 刪除對(duì)象
}
接下來(lái)是Cache類,這個(gè)類包含了主要的邏輯,包括 動(dòng)態(tài)構(gòu)建的XML文檔、將Xml文檔映射到Hashtable 等。
復(fù)制代碼 代碼如下:
public class Cache {
void AddItem(string xpath, object obj);
object GetItem(string xpath);
object[] GetList(string xpath);
void RemoveItem(string xpath);
}
僅從接口上看,這個(gè)類似乎和ICacheStrategy的沒(méi)有太大分別,實(shí)際上,這個(gè)類保存了一個(gè)對(duì)于ICacheStrategy類型實(shí)例的引用,最后一步的實(shí)際工作,都委托給了ICacheStrategy去完成。而在此之前各個(gè)方法的工作主要是由 Xml結(jié)點(diǎn)到Hashtable的映射(這里說(shuō)是Hashtable,是因?yàn)樗亲髡咛峁┑囊粋€(gè)默認(rèn)實(shí)現(xiàn),當(dāng)然也可以是其他)。
類型實(shí)現(xiàn)
我們首先看DefaultCacheStrategy,它實(shí)現(xiàn)了ICacheStrategy接口,并使用Hashtable存儲(chǔ)對(duì)象。
復(fù)制代碼 代碼如下:
public class DefaultCacheStrategy : ICacheStrategy {
private Hashtable objectStore;
public DefaultCacheStrategy() {
objectStore = new Hashtable();
}
public void AddItem(string key, object obj) {
objectStore.Add(key, obj);
}
public object GetItem(string key) {
return objectStore[key];
}
public void RemoveItem(string key) {
objectStore.Remove(key);
}
}
接下來(lái)我們一步步地看Cache類的實(shí)現(xiàn),下面是Cache類的字段以及構(gòu)造函數(shù)(注意為私有)。 Java復(fù)制代碼
復(fù)制代碼 代碼如下:
public class Cache {
private XmlElement rootMap; // 動(dòng)態(tài)構(gòu)建的 Xml文檔 的根結(jié)點(diǎn)
private ICacheStrategy cacheStrategy; // 保存對(duì)ICacheStrategy的引用
public static readonly Cache Instance = new Cache(); // 實(shí)現(xiàn)Singleton模式
private XmlDocument doc = new XmlDocument(); // 構(gòu)建 Xml文檔
// 私有構(gòu)造函數(shù),用來(lái)實(shí)現(xiàn)Singleton模式
private Cache() {
// 這里應(yīng)用了Strategy模式。
// 改進(jìn):可以將使用何種Strategy定義到app.config中,然后使用反射來(lái)動(dòng)態(tài)創(chuàng)建類型
cacheStrategy = new DefaultCacheStrategy();
// 創(chuàng)建文檔根結(jié)點(diǎn),用于映射 實(shí)際的數(shù)據(jù)存儲(chǔ)(例如Hashtable) 和 Xml文檔
rootMap = doc.CreateElement("Cache");
// 添加根結(jié)點(diǎn)
doc.AppendChild(rootMap);
}
// 略...
}
相關(guān)文章
ASP.NET實(shí)現(xiàn)TreeView的XML數(shù)據(jù)源綁定實(shí)例代碼
這篇文章介紹了ASP.NET實(shí)現(xiàn)TreeView的XML數(shù)據(jù)源綁定實(shí)例代碼,有需要的朋友可以參考一下2013-11-11ASP.NET堆和棧二之值類型和引用類型的參數(shù)傳遞和內(nèi)存分配
這篇文章介紹了ASP.NET堆和棧中值類型和引用類型的參數(shù)傳遞和內(nèi)存分配,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08如何ASP.NET Core Razor中處理Ajax請(qǐng)求
本篇技術(shù)文章主要給大家講述了如何ASP.NET Core Razor中處理Ajax請(qǐng)求這方面的知識(shí)點(diǎn),有興趣的朋友參考下。2018-01-01ASP.NET搭配Ajax實(shí)現(xiàn)搜索提示功能
為了更好的用戶體驗(yàn),不論是桌面軟件還是網(wǎng)站,在搜索查詢的輸入中都會(huì)加入提示功能,就像百度搜索一樣!今天筆者就ASP.NET編程介紹一下如何利用Ajax來(lái)實(shí)現(xiàn)搜索信息提示功能。2015-09-09asp.net+js實(shí)時(shí)奧運(yùn)金牌榜代碼
運(yùn)期間,公司交給我一個(gè)任務(wù),在公司主頁(yè)上放上奧運(yùn)金牌榜的排名,之前的實(shí)現(xiàn)方式是采用ajax2008-09-09如何在ASP.NET Core中給上傳圖片功能添加水印實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于如何在ASP.NET Core中給上傳圖片功能添加水印的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02asp.net core webapi項(xiàng)目配置全局路由的方法示例
這篇文章主要介紹了asp.net core webapi項(xiàng)目配置全局路由的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09