(1)当RuleBase中有规则添加或删除,利用观察者模式实现,一旦有变动,规则引擎其他组件也做出相应的改变。
(2)学习思想:当一个应用中涉及多个组件,为了实现易扩展,解耦思想。可以利用观察者模式实现。基于易变动的数据结构中加入监听者,监听者依据被监听者的变动动作,定义自己的动作。在监听者内部通知其他组件做出相应改变。实现面向对象的思想。组建之间实现了解藕。
一:被监听数据,也就是规则网络RuleBase的接口定义
1 package com.nonbankcard.commons.doorls.ruleBaseListern;
2 /**
3 * 定义一个核心数据的对象的接口
4 *
5 * @author sxf
6 *
7 */
8 public interface RuleBase {
9 /**
10 * 添加一个规则
11 * @param rule
12 */
13 public void addRule(String rule);
14 /**
15 * 删除一个规则
16 * @param rule
17 */
18 public void removeRule(String rule);
19 /**
20 * 修改一个规则
21 * @param rule
22 */
23 public void updateRule(String rule);
24
25 }
二:被监听数据,也就是规则网络RuleBase的实现定义
1 package com.nonbankcard.commons.doorls.ruleBaseListern;
2 /**
3 * 真正的RuleBase对象
4 * @author sxf
5 *
6 */
7 public class ReootoRuleBase implements RuleBase{
8
9 private RuleBaseListernSupport support;
10
11 @Override
12 public void addRule(String rule) {
13 support.addRule(rule);
14 System.out.println("ReootoRuleBase.addRule(添加规则的操作)");
15
16 }
17
18 @Override
19 public void removeRule(String rule) {
20 support.removeRule(rule);
21 System.out.println("ReootoRuleBase.removeRule(规则删除的操作)");
22 }
23
24 @Override
25 public void updateRule(String rule) {
26
27
28 }
29
30
31 }
三:用于管理不同组件监听器的监听管理者。
1 package com.nonbankcard.commons.doorls.ruleBaseListern;
2
3 import java.util.List;
4
5
6 /**
7 * 管理ruleBase某些动作的事件监听管理
8 *
9 * (1)当ruleBase对象发生某个动作,都要告诉监听管理器,监听管理器做相应的处理
10 * (2)监听管理者,包括监听器的行为都是依据RuleBase的动作为定。
11 * @author sxf
12 *
13 */
14 public class RuleBaseListernSupport {
15
16 /**
17 * 事件支持的监听器集合
18 */
19 private List<RuleBaseEventListern> listeners;
20
21 /**
22 * 规则添加监听器发布事件
23 * @param rule
24 */
25 public void addRule(String rule) {
26 RuleBaseEvent event=new RuleBaseEvent(rule);
27 for(RuleBaseEventListern listener:listeners){
28 listener.ruleBaseAddRule(event);
29 }
30 }
31
32
33 /**
34 * 规则删除监听器发布事件
35 * @param rule
36 */
37 public void removeRule(String rule){
38 RuleBaseEvent event=new RuleBaseEvent(rule);
39 for(RuleBaseEventListern listener:listeners){
40 listener.ruleBaseRemove(event);
41 }
42 }
43
44
45 public List<RuleBaseEventListern> getListeners() {
46 return listeners;
47 }
48
49
50 public void setListeners(List<RuleBaseEventListern> listeners) {
51 this.listeners = listeners;
52 }
53
54
55
56 }
四:各种组件监听器的接口定义
1 package com.nonbankcard.commons.doorls.ruleBaseListern;
2 /**
3 * (1)监听器接口,将来不同的组件监听RuleBase的变动,都可以声明一个监听器,实现该接口
4 * (2)将监听器注册到RuleBase的监听管理者内部
5 * @author sxf
6 *
7 */
8 public interface RuleBaseEventListern {
9
10 /**
11 * 一个规则被添加
12 * @param event
13 */
14 public void ruleBaseAddRule(RuleBaseEvent event);
15 /**
16 * 一个规则被删除
17 * @param event
18 */
19 public void ruleBaseRemove(RuleBaseEvent event);
20
21 }
五:各种监听器的监听事件的定义
1 package com.nonbankcard.commons.doorls.ruleBaseListern;
2 /**
3 * ruleBase的监听事件
4 * @author sxf
5 *
6 */
7 public class RuleBaseEvent {
8
9 private Object source;
10
11 public RuleBaseEvent(Object source) {
12 super();
13 this.source = source;
14 }
15
16 public Object getSource() {
17 return source;
18 }
19
20 public void setSource(Object source) {
21 this.source = source;
22 }
23
24
25 }
六:RuleBase变动日记记录的监听器
1 package com.nonbankcard.commons.doorls.ruleBaseListern;
2 /**
3 * ruleBase改变记录日志的监听器
4 * @author sxf
5 *
6 */
7 public class LogRecordRuleBaseListener implements RuleBaseEventListern {
8
9 @Override
10 public void ruleBaseAddRule(RuleBaseEvent event) {
11 String rule=(String) event.getSource();
12 System.out.println("LogRecordRuleBaseListener.ruleBaseAddRule(一个规则被添加===>"+rule);
13
14 }
15
16 @Override
17 public void ruleBaseRemove(RuleBaseEvent event) {
18 String ruleString=(String) event.getSource();
19 System.out.println("LogRecordRuleBaseListener.enclosing_method(一个规则被删除)"+ruleString);
20
21 }
22
23
24
25 }
七:RuleBase变动通知用户的监听器
1 package com.nonbankcard.commons.doorls.ruleBaseListern;
2
3 public class NoticeSystemRuleBaseListener implements RuleBaseEventListern {
4
5 @Override
6 public void ruleBaseAddRule(RuleBaseEvent event) {
7 String rule=(String) event.getSource();
8 System.out.println("NoticeSystemRuleBaseListener.ruleBaseRemove(通知用户添加一个规则)"+rule);
9
10 }
11
12 @Override
13 public void ruleBaseRemove(RuleBaseEvent event) {
14 String rule=(String) event.getSource();
15 System.out.println("NoticeSystemRuleBaseListener.ruleBaseRemove(通知用户删除了一个规则)"+rule);
16 }
17
18 }