Welcome 微信登录

首页 / 软件开发 / JAVA / 模式实践:观察者模式与Spring

模式实践:观察者模式与Spring2011-01-15公司的项目告一段落,最近在进行RUP培训项目,有了些空闲的时间。闲暇浏览TheServerSide时,看到一篇名叫《Spring loaded Observer Pattern》的文章,不禁会心一笑——我已在两个月前应用到项目中了。而作者的观点也和我的观点吻合:the Spring framework is a great reason to continue design pattern advocacy in your projects.

下面我将自己在项目中应用的实例拿出来和大家分享,共同进步。

我将实际项目中的包名、业务逻辑代码屏蔽掉了,并进行了一定的简化。

在系统中存在这样的情况:一个功能点触发的动作会引起相关一个或者多个功能点在业务上进行对应的数据处理。而到底有几个功能点要做出相应,要看客户实施了哪些需要作出响应的具体功能点。

例如:A功能点的某项业务会触发B、C、D三功能点做出回应,而客户购买了哪些功能点是个未知数,也许客户不需要C功能点,对A功能点业务操作作出响应的仅有B、D。

根据上面的需求可以得出,设计上要尽量的松散耦合,保持各功能点的独立性。观察者模式责无旁贷的跳了出来(深入浅出观察者模式)。

我们的系统在整体上采用Spring framework来进行Bean管理。利用Spring通过配置文件来加载具体的类的方式——相当于被包装了的工厂,使得代码更加灵活。同样,观察者模式的应用可以很好的借用Spring framework提供的平台,变得更加灵活。

首先创建了抽象观察者角色:

[php]/**
* 抽象观察者,用于处理相关的记录
* @author Ai92
* </pre>
* Created on :2005-7-4 11:36:14
* </pre>
*/
public abstract class StaffingObserver {
public abstract void update (Map para)throws BaseException;
}[/php]

由于仅仅是举例,这里只列出一个具体观察者角色:

[php]/**
* Concrete Subject具体观察者角色。这里省略了业务代码
* @author Ai92
* </pre>
* Created on :2005-5-30 14:59:11
* </pre>
*/
public class TerminateDispatch extends StaffingObserver {
/**
* @param staffRecordID
* @throws BaseException
* @author Ai92
* <pre>
* Created on :2005-5-30 14:59:11
* </pre>
*/
public void update(Map para) throws BaseException {
//……do same business act
}
private DispatchDAO dispatchDAO ;
/**
* @param dispatchDAO 设置 dispatchDAO
*/
public void setDispatchDAO(DispatchDAO dispatchDAO) {
this.dispatchDAO = dispatchDAO;
}
}[/php]