时间: 2001-4-1
摘要:
Jive 是一个开放源码的论坛项目, 也就是我们所常见的 BBS, 采用了 SUN
公司的 JSP 技术, 相比起 J2EE 这个庞大的体系结构, 其整个的设计思想非常
精炼, 适用于中小型网站, 建立自己的论坛系统. 这篇文章我们就一起来看一看
Jive 中所应用的设计模式(Design Pattern).
正文:
关于设计模式, 这篇文章并不详细解释, 只是结合 Jive 来看看设计模式在一
个实际项目中的应用及其整体的设计思想. 所以在读这篇文章前, 假设您对设计模
式有一个感性的认识, 对其具体应用以及实现方法有些疑问, 并渴望了解其思想,
并使用过 Jive. 本文将一同来探讨这个问题. 为什么选择 Jive 而不是选择一个新的
例子重新开始呢? 有以下两个原因: 1, 我们很多人对 bbs 这样一个事物比较熟悉,
很清楚 bbs 所具有的一些基本功能, 如果自己作为设计者来设计这样一个
的优点才能更快地进步. 2, Jive 并不是非常地复杂, 并且包括了一个完整的实现方
字串6
案, 从底层到高层, 从后端到前端, 都有很好的文档, 这些都能更好地帮助我们理解
它.
这里我们所用的 Jive 的版本采用其开发者作为正式发布的 1.0 版, 其最新版
为 1.21, 对其结构作了少量改动, 主要增加了 jsp tag 的支持, 这种技术不属于我
们的讨论范围, 以后有机会可以共同学习.
Jive 中所使用的设计模式, 对设计模式的三种类型 -- 创建型, 结构型,
行为型 -- 都有涉及, 这样也能比较全面地了解设计模式. 我们先来自己设计一下,
运用面向对象的思想, 可以很容易知道, 整个系统主要需要这几个对象:
1, Forum -- 一个讨论区, 也就是一个版面.
2, Thread -- 一条线索, 也就是有关同一个主题的所有的回文.
3, Message -- 一条消息, 也就是一个用户发的一篇贴子.
(以后我们就用"贴子"这个叫法)
4, User -- 一个用户, 也就是讨论区的使用者.
好了, 我们需要的东西都在了, 它们之间的关系十分复杂, 怎么把它们组织地
很符合我们的思路又能容易扩充呢? 我想大家都有自己的想法了, "我能这么这么做",
"我可以这样这样设计", 我们一起来看看 Jive 是怎么做的. 下面是其整体结构:
字串3
|~~~~~~~~~~~~~~~~~~|
| Skin 设计者 |
|__________________|
| |
| | 使用
\ /
|~~~~~~~~~~~~~~~~~|
| 各种对象的接口 |
|_________________|
| |
| | 被实现
\ /
|~~~~~~~~~~~~|
| 权限控制 |
|____________|
| |
| | 控制
\ /
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 对数据库进行操作的各种对象 |
|_____________________________|
| |
| | 取连接 字串6
\ /
|~~~~~~~~~~~~~~~~|
| 数据库连接池 |
|________________|
(图 1)
下面是其类的大概的继承情况:
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| Interface A |
|___________________________________|
| |
| implements |
| |
|~~~~~~~~~~~~~~~~~| |
| Proxy A | |
|_________________| |
|
|
|~~~~~~~~~~~~~~~~~~|
| Database A |
字串5
|__________________|
(图 2)
好了看到这里, 如果您对设计模式有了解的话, 从上面所写的伪名字中, 可以
看到一些熟悉的东西. 请让我做一些解释. 上面的图表示的是类的继承关系, A 代
表上面所提到的四种对象, Interface A 表示名为 A 的一个接口, 相信大家对接口
都不陌生, 接口在 Java 中有着重要的作用. Proxy A 表示一个名为 ProxyA 的类,
实现 A 接口. Database A 表示名为 DbA 的一个类, 实现 A 接口. 但设计模式并
没有从中体现出来,设计模式所要表现的是怎么样更好地组织对象之间的逻辑关系,
怎么样才能更好地扩充现有的东西而不需要作很大的改动, 而不仅仅是类的继承.
还有一点需要说明的是, 设计模式总的原则是针对接口编程, 而不关心其具体
实现, 这样搭起来的是一个架子, 还需要作许多具体的编程才能真正的完成系统.
下面, 我们就分别从设计模式的三种类型来看 Jive 使用了其中的哪些.
![我要研发网[www.51dev.com]](/templets/images/toplogo.gif)
