asp.net SAF 中緩存服務(wù)的實(shí)現(xiàn)第2/5頁
更新時(shí)間:2008年08月08日 21:28:49 作者:
對緩存的興趣源于張子陽寫的一篇文章《SAF 中緩存服務(wù)的實(shí)現(xiàn)》中的一個(gè)例子:
類型接口
我們先看一下類型的組織,然后再看實(shí)現(xiàn)。
ICacheStrategy用于定義如何添加、獲取、刪除欲進(jìn)行緩存的對象。實(shí)際上,在接口的實(shí)體類中要明確使用何種類型來存儲對象,是Dictionary還是Hashtable或者其他。
C#
復(fù)制代碼 代碼如下:
public interface ICacheStrategy {
void AddItem(string key, object obj);// 添加對象
object GetItem(string key); // 獲取對象
void RemoveItem(string key); // 刪除對象
}
接下來是Cache類,這個(gè)類包含了主要的邏輯,包括 動態(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的沒有太大分別,實(shí)際上,這個(gè)類保存了一個(gè)對于ICacheStrategy類型實(shí)例的引用,最后一步的實(shí)際工作,都委托給了ICacheStrategy去完成。而在此之前各個(gè)方法的工作主要是由 Xml結(jié)點(diǎn)到Hashtable的映射(這里說是Hashtable,是因?yàn)樗亲髡咛峁┑囊粋€(gè)默認(rèn)實(shí)現(xiàn),當(dāng)然也可以是其他)。
類型實(shí)現(xiàn)
我們首先看DefaultCacheStrategy,它實(shí)現(xiàn)了ICacheStrategy接口,并使用Hashtable存儲對象。
復(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);
}
}
接下來我們一步步地看Cache類的實(shí)現(xiàn),下面是Cache類的字段以及構(gòu)造函數(shù)(注意為私有)。 Java復(fù)制代碼
復(fù)制代碼 代碼如下:
public class Cache {
private XmlElement rootMap; // 動態(tài)構(gòu)建的 Xml文檔 的根結(jié)點(diǎn)
private ICacheStrategy cacheStrategy; // 保存對ICacheStrategy的引用
public static readonly Cache Instance = new Cache(); // 實(shí)現(xiàn)Singleton模式
private XmlDocument doc = new XmlDocument(); // 構(gòu)建 Xml文檔
// 私有構(gòu)造函數(shù),用來實(shí)現(xiàn)Singleton模式
private Cache() {
// 這里應(yīng)用了Strategy模式。
// 改進(jìn):可以將使用何種Strategy定義到app.config中,然后使用反射來動態(tài)創(chuàng)建類型
cacheStrategy = new DefaultCacheStrategy();
// 創(chuàng)建文檔根結(jié)點(diǎn),用于映射 實(shí)際的數(shù)據(jù)存儲(例如Hashtable) 和 Xml文檔
rootMap = doc.CreateElement("Cache");
// 添加根結(jié)點(diǎn)
doc.AppendChild(rootMap);
}
// 略...
}
相關(guān)文章
Excel自定義關(guān)閉按鈕實(shí)現(xiàn)代碼
這篇文章主要介紹了Excel自定義關(guān)閉按鈕實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
ASP.NET C#生成下拉列表樹實(shí)現(xiàn)代碼
下拉列表樹很方便且時(shí)尚的一個(gè)導(dǎo)航,貌似很多的朋友都想實(shí)現(xiàn)這樣一個(gè)列表樹,本文將滿足你們的設(shè)想,通過本文你們可以學(xué)到如何使用c#生成下拉列表樹,感興趣的你可不要錯(cuò)過了啊2013-02-02
ASP.NET數(shù)據(jù)綁定之DataList控件
這篇文章主要為大家介紹了ASP.NET數(shù)據(jù)綁定中的DataList控件,DataList控件以表的形式呈現(xiàn)數(shù)據(jù),通過該控件,您可以使用不同的布局來顯示數(shù)據(jù)記錄,對DataList控件感興趣的小伙伴們可以參考一下2016-01-01
ASP.NET Core 3.0輕量級角色API控制授權(quán)庫
這篇文章介紹了ASP.NET Core 3.0輕量級角色API控制授權(quán)庫,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01
ASP.NET Core中如何實(shí)現(xiàn)重定向詳解
這篇文章主要給大家介紹了關(guān)于ASP.NET Core中如何實(shí)現(xiàn)重定向的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
用Html5與Asp.net MVC上傳多個(gè)文件的實(shí)現(xiàn)代碼
Html 5 的有一些File API,對Form表單增強(qiáng)的特性,讓我們輕松支持多文件上傳,看下面的Html片斷代碼2012-08-08
ASP.NET DataTable去掉重復(fù)行的2種方法
這篇文章主要介紹了ASP.NET DataTable去掉重復(fù)行的2種方法,本文直接給出去重代碼,需要的朋友可以參考下2015-02-02

