到 Google 资讯主页   
EasyJF首页   资料   源码   软件    论坛   网站    
   使用帮助    
    该信息为本站MyRSS系统缓存内容,部分图片及附件有可能无法正常使用.easyjf.comJavaResearch无关,不对该信息负责.通过http://kb.csdn.net/keyword/java//../../java/Articles/200206/82950205-f6e9-4dcd-af23-4ba92044e938.html访问该信息的原始内容.
页面功能  【加入收藏】 【推荐给朋友】 【字体:  】 【关闭】   
jive设计思路
作者: 来源:JavaResearch  发布时间:2002-06-03 00:00:00.0

作为论坛的基础,设计者为之建立了一系列的接口,用以代表论坛系统所需要的基本对象的操作(注意是基本对象的操作而非基本对象,因此使用了接口方式而非抽象基类,这样在具体实现上具有更大的灵活性,以Forum为例,由于是接口,因此没有规定其主要标识ForumID的类型,如果使用数据库实现方式,那么long类型将是合适的选择,而如果是XML文件方式实现,那么实现者也许会想使用String方式标记,在需要的时候进行转换),这些接口主要表示了授权、过滤器、论坛、主题、消息、用户、用户组、以及几个用以管理这些对象的管理器,在这些抽象的基础上,设计者给出了与之对应的Proxy,用以进行权限管理。作为一个需要权限认证和管理的系统,使用此方式可以对外隐藏这个权限认证的细节,因为这些Proxy实现了与之对应的那些接口,因此可以像使用接口一样使用这些Proxy类,它们在内部封装了一个对应的具体实例,将实际的操作完全交给该实例,只是在调用实例的对应方法前进行了权限的验证,这样,这些抽象接口的实现类就可以完全不用为权限操心,达到最终操作和权限的分离,而外部是察觉不到这个变化的。 jive另一个值得提到的特点就是缓存功能,使用缓存功能能够在大多情况下极大的提高系统的性能。缓存的基础是Cacheable接口,该接口只有一个方法:getSize,返回需要缓存的对象的大小,这个大小应该可以很好的反映要缓存的对象的大小(之所以需要大小,意义最大在于FroumMessage和ForumThread,因为这两个对象的具体实例的大小间的差异会非常的大,而Forum,User,Group等对象的各实例间的差异不会很大),缓存功能的另一个非常重要的类就是LongCache,因为在论坛的实现中,那些缓存类其实就是对LongCache的封装,而这个类本身封装了三个集合类来完成其具体的功能,一个HashMap和两个LinkedList,分别代表缓存的对象的集合,缓存对象的最近访问顺序以及加入缓存的顺序,和标准的JDK的集合类所不同的是LongHashMap是以long型值作为其key的,而标准集合框架使用Object作为key,另外,在将缓存对象加入缓存时,add方法将该对象又封装到了一个LongCacheObject对象中,之所以如此是因为HashMap是无序的,而缓存机制想实现的是最近最常访问原则,因此在对缓存中的对象进行访问时会修改代表最近访问顺序的那个LinkedList中的数据,将该对象的最近访问位置提到最前,而如果不将该对象进行再度封装(主要是需要它在链表中的位置),那么它不会知道它在代表最近访问顺序的那个LinkedList中的位置,虽然可以通过遍历得到,但是这样做的开销很大,将失去缓存功能的意义,将对象封装到LongCacheObject中后,其前后节点的信息被保存到了LongCacheObject中,这样在对代表最近访问顺序的那个LinkedList中的数据进行修改的时间开销将是常数级的。(关于这个实现的性能好坏是值得探究一下的,因为封装的作用使得必须生成较多的对象,生成新对象的操作是比较消耗时间的,但是要实现最近最常使用原则,单纯的使用标准集合框架好像也不是很可行,因为其key必须是Object,这样也必须进行封装,而且在完成链表的修改时也没有很好的方法,jive的实现中还有一点就是在读取缓存的数据前会对过期的缓存内容进行清除,这个好像也不是很好的方式,可以考虑让LongCache实现Runable接口,让它自动的完成这个工作,但是这个方法对性能的提升能有多大呢?) 

 
相关文章
 
页面功能  【加入收藏】 【推荐给朋友】 【字体:  】 【关闭】   


EasyJF.com 2006 隐私政策 使用EasyJF前必读