【java规则引擎】规则引擎RuleBase中利用观察者模式

简介: (1)当RuleBase中有规则添加或删除,利用观察者模式实现,一旦有变动,规则引擎其他组件也做出相应的改变。(2)学习思想:当一个应用中涉及多个组件,为了实现易扩展,解耦思想。可以利用观察者模式实现。

(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 }
View Code

二:被监听数据,也就是规则网络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 }
View Code

三:用于管理不同组件监听器的监听管理者。

 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 }
View Code

四:各种组件监听器的接口定义

 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 }
View Code

五:各种监听器的监听事件的定义

 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 }
View Code

六: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 }
View Code

七: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 }
View Code

 

相关文章
|
7月前
|
设计模式 消息中间件 前端开发
浅析观察者模式在Java中的应用
观察者模式(Observer Design Pattern),也叫做发布订阅模式(Publish-Subscribe Design Pattern)、模型-视图(Model-View)模式、源-监听器(Source-Listener)模式、从属者(Dependents)模式
104 3
|
18天前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
6月前
|
数据可视化 Java
探索Drools:Java世界的规则引擎
探索Drools:Java世界的规则引擎
389 1
|
2月前
|
数据可视化 算法 Java
JAVA规则引擎工具
本文介绍了六款常用的Java规则引擎:Drools、IBM ODM、Easy Rules、jBPM、OpenL Tablets 和 Apache Camel。每款引擎都有其独特的特点和适用场景,如Drools的高效规则匹配、IBM ODM的Web界面管理、Easy Rules的轻量级特性、jBPM的流程管理、OpenL Tablets的Excel规则定义以及Apache Camel的路由和规则结合。选择合适的规则引擎可以显著提高系统的灵活性和可维护性。
109 0
|
7月前
|
设计模式 监控 Java
设计模式 - 观察者模式(Observer):Java中的战术与策略
【4月更文挑战第7天】观察者模式是构建可维护、可扩展系统的关键,它在Java中通过`Observable`和`Observer`实现对象间一对多的依赖关系,常用于事件处理、数据绑定和同步。该模式支持事件驱动架构、数据同步和实时系统,但需注意避免循环依赖、控制通知粒度,并关注性能和内存泄漏问题。通过明确角色、使用抽象和管理观察者注册,可最大化其效果。
129 2
|
4月前
|
设计模式 存储 前端开发
【十四】设计模式~~~行为型模式~~~观察者模式(Java)
文章详细介绍了观察者模式(Observer Pattern),这是一种对象行为型模式,用于建立对象之间的一对多依赖关系。当一个对象状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。文中通过交通信号灯与汽车的案例以及多人联机对战游戏的设计方案,阐述了观察者模式的动机和应用场景。接着,文章介绍了观察者模式的结构、角色、优点、缺点以及适用情况,并通过代码示例展示了如何在Java中实现观察者模式。此外,还探讨了观察者模式在MVC架构中的应用以及Java中对观察者模式的支持。
【十四】设计模式~~~行为型模式~~~观察者模式(Java)
|
5月前
|
算法 数据可视化 Java
JAVA规则引擎工具有哪些?
本文对比分析了六种Java规则引擎:Drools、IBM ODM (JRules)、Easy Rules、JBPM、OpenL Tablets以及Apache Camel结合规则组件的应用。Drools是一款功能全面的业务规则管理系统,支持DRL文件定义规则、高效的规则匹配算法、复杂的规则流及决策表,并易于与Java应用集成。IBM ODM (原JRules)提供了强大的规则管理功能,包括Web界面和Eclipse插件定义管理规则、直观的决策表和决策树、REST和Java API集成选项及优化的性能。
795 3
|
5月前
|
设计模式 安全 Java
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
84 1
|
5月前
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
69 1
|
5月前
|
设计模式 Java
Java面试题:什么是观察者模式以及如何在Java中实现?
Java面试题:什么是观察者模式以及如何在Java中实现?
36 0