asp.net SAF 中緩存服務(wù)的實現(xiàn)第2/5頁
更新時間:2008年08月08日 21:28:49 作者:
對緩存的興趣源于張子陽寫的一篇文章《SAF 中緩存服務(wù)的實現(xiàn)》中的一個例子:
類型接口
我們先看一下類型的組織,然后再看實現(xiàn)。
ICacheStrategy用于定義如何添加、獲取、刪除欲進行緩存的對象。實際上,在接口的實體類中要明確使用何種類型來存儲對象,是Dictionary還是Hashtable或者其他。
C#
復(fù)制代碼 代碼如下:
public interface ICacheStrategy {
void AddItem(string key, object obj);// 添加對象
object GetItem(string key); // 獲取對象
void RemoveItem(string key); // 刪除對象
}
接下來是Cache類,這個類包含了主要的邏輯,包括 動態(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);
}
僅從接口上看,這個類似乎和ICacheStrategy的沒有太大分別,實際上,這個類保存了一個對于ICacheStrategy類型實例的引用,最后一步的實際工作,都委托給了ICacheStrategy去完成。而在此之前各個方法的工作主要是由 Xml結(jié)點到Hashtable的映射(這里說是Hashtable,是因為它是作者提供的一個默認實現(xiàn),當(dāng)然也可以是其他)。
類型實現(xiàn)
我們首先看DefaultCacheStrategy,它實現(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類的實現(xiàn),下面是Cache類的字段以及構(gòu)造函數(shù)(注意為私有)。 Java復(fù)制代碼
復(fù)制代碼 代碼如下:
public class Cache {
private XmlElement rootMap; // 動態(tài)構(gòu)建的 Xml文檔 的根結(jié)點
private ICacheStrategy cacheStrategy; // 保存對ICacheStrategy的引用
public static readonly Cache Instance = new Cache(); // 實現(xiàn)Singleton模式
private XmlDocument doc = new XmlDocument(); // 構(gòu)建 Xml文檔
// 私有構(gòu)造函數(shù),用來實現(xiàn)Singleton模式
private Cache() {
// 這里應(yīng)用了Strategy模式。
// 改進:可以將使用何種Strategy定義到app.config中,然后使用反射來動態(tài)創(chuàng)建類型
cacheStrategy = new DefaultCacheStrategy();
// 創(chuàng)建文檔根結(jié)點,用于映射 實際的數(shù)據(jù)存儲(例如Hashtable) 和 Xml文檔
rootMap = doc.CreateElement("Cache");
// 添加根結(jié)點
doc.AppendChild(rootMap);
}
// 略...
}
相關(guān)文章
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í)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01
用Html5與Asp.net MVC上傳多個文件的實現(xiàn)代碼
Html 5 的有一些File API,對Form表單增強的特性,讓我們輕松支持多文件上傳,看下面的Html片斷代碼2012-08-08
ASP.NET DataTable去掉重復(fù)行的2種方法
這篇文章主要介紹了ASP.NET DataTable去掉重復(fù)行的2種方法,本文直接給出去重代碼,需要的朋友可以參考下2015-02-02

