Jive源代码研究

帮我想个女拐名

帮我想个女拐名

2016-02-19 18:58

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享Jive源代码研究吧。

  前言 Jive是一个开放的Java源代码项目。其目标是建设一个开放结构的,强壮的,易于扩展的基于jsp的论坛。在其设计目标的指导下,其结构设计得非常得好,融合了很多新的观念,比如Design Pattern,可更换的SKIN,可插入Plug等等。 !-- frame contents --!-- /frame contents -- 具体解读其源代码对于理解这些新的设计上的概念是很有裨益的。假如你对Design Pattern和Java语言有一定的了解,但是还是会时常迷惑于其中的话,不妨研究研究Jive源代码,一定会对其中的很多概念有更深入的理解。这篇文章源于我的Jive源代码研究笔记,希望能够提纲挈领,带领大家进入到这个美好的世界。当然,假如没有时间仔细地看源代码的话,看看这篇文章,我想也是会有一些帮助的。
  
  再开始之前,需要指出的是,Jive中对Design Pattern的应用,并没有拘礼与GOF书中所给出的实现方法,而是有许多变通的地方。一方面,我想是由于具体的实际需要,另一方面,我想这也是设计观念进化的结果吧。因而,这些变通的地方,将是我讲解的重点。整体结构概叙
  基于一个OO的设计原则:面向接口编程,而不是针对实现编程。Jive在设计的时候,把其大部分的基本对象都设计为接口或者抽象类。在Jive中,基本的接口有Forum,ForumMessage,ForumThread,Group,User,Authorization和Query。我们可以很轻易的从这些接口的名字来知道他们的功用,下面的类图给出了这些类之间的一些静态关系:
  

图1:Jive整体关系
  

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  
  你可能会有疑问,为什么会都是接口呢?这是基于扩展性考虑的。在Jive给出的实现中,所有的这些接口,Forum,ForumMessage,User等等,都使用数据库来实现的,一条消息,或者一个用户对应于数据库中的一条消息Jive使用了DbForum,DbForumMessage,DbUser等类来实现这些接口,通过JDBC来操作数据库,使之作为论坛的底层支撑。
  
  然而,有时候,或许我们并不想使用数据库,比如我们想只是使用文件系统来作为论坛的底层支撑,这时候,我们需要做的只是编码实现了Forum等等接口的诸如FileFroum,FileForumMessage等对象,然后嵌入Jive中即可,原有的任何代码都可以不用改变!!!这就是面向接口编程的威力了!
  
  下面来看看具体的设计和编码。
  
  AbstractFactory模式和可扩展性
  假如要实现较好的可扩展性,AbstractFactory模式确实是一件利器。如上面所说,假如要创建的Forum接口的不同实现,而又不想更改代码的话,就需要用到抽象工厂了。再Jive中,AuthorizationFactory类是一个抽象类,用来创建Authorization对象。这是一个抽象工厂,可以通过不同的子类来创建不同的Authorization对象。这个工厂的实现方法是:
  
  在AuthorizationFactory中使用一个private static变量factory,用来引用具体的抽象工厂的实例:
  

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  private static AuthorizationFactory factory = null;


  
  用一个private static的String,来指明具体的抽象工厂的子类类名:
  

  private static String className ="com.coolservlets.forum.database.DbAuthorizationFactory";


  
  然后是用一个private static的loadAuthorizationFactory方法来给这个factory变量赋值,生成具体的抽象工厂类:
  

private static void loadAuthorizationFactory() {
  if (factory == null) {
  synchronized(className) {
  if (factory == null) {
  String classNameProp = PropertyManager.getProperty(
  "AuthorizationFactory.className"
  );
  if (classNameProp != null) {
  className = classNameProp;
  }
  try {
  Class c = Class.forName(className);
  factory = (AuthorizationFactory)c.newInstance();
  }
  catch (Exception e) {
  System.err.println("Exception loading class: " + e);
  e.printStackTrace();
  }
  }
  }
  }
  }


  
  在static的getAuthorization方法返回一个Authorization的过程中,先初始化工厂类factory变量,然后用factory的createAuthorization方法来创建:
  
展开更多 50%)
分享

猜你喜欢

Jive源代码研究

编程语言 网络编程
Jive源代码研究

jquery ready函数源代码研究

Web开发
jquery ready函数源代码研究

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

AJAX 请求 源代码

Web开发
AJAX 请求 源代码

解密ASP源代码

ASP
解密ASP源代码

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

CASSINI源代码分析(4)

电脑网络
CASSINI源代码分析(4)

清空代码防止查看源代码的js代码

Web开发
清空代码防止查看源代码的js代码

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

PowerPoint 2010实现随心所欲的演示流程

PowerPoint 2010实现随心所欲的演示流程

直接用 java 命令行动态生成jpg文件

直接用 java 命令行动态生成jpg文件
下拉加载更多内容 ↓