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),當然也可以是其他)。
類型實現(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實現(xiàn)TreeView的XML數(shù)據(jù)源綁定實例代碼
這篇文章介紹了ASP.NET實現(xiàn)TreeView的XML數(shù)據(jù)源綁定實例代碼,有需要的朋友可以參考一下2013-11-11ASP.NET堆和棧二之值類型和引用類型的參數(shù)傳遞和內(nèi)存分配
這篇文章介紹了ASP.NET堆和棧中值類型和引用類型的參數(shù)傳遞和內(nèi)存分配,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08如何在ASP.NET Core中給上傳圖片功能添加水印實例代碼
這篇文章主要給大家介紹了關(guān)于如何在ASP.NET Core中給上傳圖片功能添加水印的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02asp.net core webapi項目配置全局路由的方法示例
這篇文章主要介紹了asp.net core webapi項目配置全局路由的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09