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);
}
// 略...
}
相关文章
ASP.NET实现TreeView的XML数据源绑定实例代码
这篇文章介绍了ASP.NET实现TreeView的XML数据源绑定实例代码,有需要的朋友可以参考一下2013-11-11ASP.NET堆和栈二之值类型和引用类型的参数传递和内存分配
这篇文章介绍了ASP.NET堆和栈中值类型和引用类型的参数传递和内存分配,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-08-08如何在ASP.NET Core中给上传图片功能添加水印实例代码
这篇文章主要给大家介绍了关于如何在ASP.NET Core中给上传图片功能添加水印的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧2019-02-02asp.net core webapi项目配置全局路由的方法示例
这篇文章主要介绍了asp.net core webapi项目配置全局路由的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-09-09
最新评论