asp.net SAF 中缓存服务的实现第2/5页
更新时间:2008年08月08日 21:28:49 作者:
对缓存的兴趣源于张子阳写的一篇文章《SAF 中缓存服务的实现》中的一个例子:
类型接口
我们先看一下类型的组织,然后再看实现。
ICacheStrategy用于定义如何添加、获取、删除欲进行缓存的对象。实际上,在接口的实体类中要明确使用何种类型来存储对象,是Dictionary还是Hashtable或者其他。
C#
复制代码 代码如下:
public interface ICacheStrategy {
void AddItem(string key, object obj);// 添加对象
object GetItem(string key); // 获取对象
void RemoveItem(string key); // 删除对象
}
接下来是Cache类,这个类包含了主要的逻辑,包括 动态构建的XML文档、将Xml文档映射到Hashtable 等。
复制代码 代码如下:
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结点到Hashtable的映射(这里说是Hashtable,是因为它是作者提供的一个默认实现,当然也可以是其他)。
类型实现
我们首先看DefaultCacheStrategy,它实现了ICacheStrategy接口,并使用Hashtable存储对象。
复制代码 代码如下:
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类的实现,下面是Cache类的字段以及构造函数(注意为私有)。 Java复制代码
复制代码 代码如下:
public class Cache {
private XmlElement rootMap; // 动态构建的 Xml文档 的根结点
private ICacheStrategy cacheStrategy; // 保存对ICacheStrategy的引用
public static readonly Cache Instance = new Cache(); // 实现Singleton模式
private XmlDocument doc = new XmlDocument(); // 构建 Xml文档
// 私有构造函数,用来实现Singleton模式
private Cache() {
// 这里应用了Strategy模式。
// 改进:可以将使用何种Strategy定义到app.config中,然后使用反射来动态创建类型
cacheStrategy = new DefaultCacheStrategy();
// 创建文档根结点,用于映射 实际的数据存储(例如Hashtable) 和 Xml文档
rootMap = doc.CreateElement("Cache");
// 添加根结点
doc.AppendChild(rootMap);
}
// 略...
}


最新评论