装饰器模式应用--动态规则引擎

原创 2018年04月16日 19:11:19

        装饰器模式应用于动态功能添加,将功能实现分布于不同的组件,代码扩展能力强。

        先从网上寻找示例,为英雄联盟里面的英雄添加技能,类图如下:

        

        左侧Hero与BindMonk就是简单的接口与实现类关系,右侧Skills代码:

public class Skills implements Hero{
    private Hero hero;
    public Skills(Hero hero){
        this.hero=hero;
    }
    public void learnSkills() {
        if(hero!=null)
        hero.learnSkills();
    }
}

        Skills与Hero构成实现与聚合关系,具体技能实现类代码:

public class Skill_A extends Skills{

    public Skill_A(Hero hero) {
        super(hero);
    }

    @Override
    public void learnSkills(){
        super.learnSkills();
        System.out.println("learn the skill_a");
    }
}

         具体技能实现类是在实现父类英雄技能的基础上动态添加了skill_a技能,这样达到了英雄与技能的解耦。测试类:

public class DecoratorTest {
    public static void main(String[] args){
        Hero hero=new BindMonk("whp");
        Skills a= new Skill_A(hero);
        Skills b=new Skill_B(a);
        b.learnSkills();
    }
}

       打印结果:

whp学习如下技能
learn the skill_a
learn the skill_b

        项目开发中遇到这样一个业务场景,通过收集用户的日志来匹配设计好的规则,日常规则固定有7种类型,可以动态修改规则内容:


        日志匹配规则要进行大量的if-else操作,导致代码膨胀混乱,可以采用构造器模式,将模式匹配模块化,这样,提高代码的可维护性以及动态扩展性。


      当然java存在很多开源规则引擎框架,该代码纯碎在小编觉得对方代码难以维护的情况下做的一步优化,望大神勿喷!

       用例代码见个人git账户:

                https://github.com/whpHarper/java

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012466304/article/details/79964302

基于SPRING的应用增加简单规则引擎

这篇文章解释了在J2EE应用中规则引擎及声明性业务逻辑的优点,并且描述如何为流行的Spring框架开发简单的规则引擎。此文需要读者对Spring有基本的了解。    任何大一点的软件项目都包含了许多叫...
  • zaowei21
  • zaowei21
  • 2007-06-25 11:19:00
  • 1070

装饰器模式-JAVA

一、定义 装饰模式(Decorator Pattern)是一种比较常见的模式,定义如下:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更加灵活。 装饰模式的通用类图如下所...
  • zjt1388
  • zjt1388
  • 2015-11-14 14:45:28
  • 384

PHP设计模式——装饰器模式

声明:本系列博客参考资料《大话设计模式》,作者程杰。         装饰器模式又叫装饰者模式。装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也...
  • jhq0113
  • jhq0113
  • 2015-05-03 12:55:40
  • 3514

openjweb快速开发平台中使用Groovy动态语言作为规则引擎解决方案

由于在工作流设计中需要为条件分支设定条件表达式,所以需要可以动态执行的语言脚本作为工作流的规则引擎.工作流条件分支纯粹使用sql脚本肯定是不行的,经过试验,groovy的脚本可以返回为java接受的变...
  • baozhengw
  • baozhengw
  • 2009-07-15 21:38:00
  • 4535

规则引擎简单应用

 规则引擎的功能和特点是在不改变流程,不重新部署工程的情况下,动态的配置策略信息,修改策略逻辑.达到动态的业务配置目的。 举一个简单的例子.一个销售机构销售一种商品,当该商品的数量小于10...
  • zhang450240738
  • zhang450240738
  • 2015-08-21 10:39:50
  • 740

规则引擎-BRMS在企业开发中的应用

1. 什么是规则复杂企业级项目的开发以及其中随外部条件不断变化的业务规则(business logic),迫切需要分离商业决策者的商业决策逻辑和应用开发者的技术决策,并把这些商业决策放在中心数据库或其...
  • lifetragedy
  • lifetragedy
  • 2016-10-17 12:07:54
  • 8406

你是否应该使用规则引擎

“规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。” -...
  • Paulmin
  • Paulmin
  • 2017-09-01 10:44:27
  • 1129

装饰器模式以及继承的应用场景

最近,看到有朋友在吐槽,说在用redis的client库jedis的连接池的时候,得到的jedis的实例,调用close方法之后,不能回到池里面,而是真的关闭了连接。为什么大家会觉得调用close方法...
  • linsongze2011
  • linsongze2011
  • 2017-01-22 09:45:14
  • 1048

旗正规则引擎在薪资管理方面的应用

人力资源管理六大模块为:人力资源规划、招聘与配置、培训与开发、绩效管理、薪酬福利管理、劳动关系管理。各大模块不可分割,要根据不同的情况,不断地调整工作的重点,才能保证人力资源管理保持良性运作,并支持企...
  • qq_39763312
  • qq_39763312
  • 2017-12-01 14:05:38
  • 61

Java开源规则引擎-Drools

Java开源规则引擎-Drools 1. Drools规则引擎介绍 1.1  Drools基本介绍 Drools是用Java语言编写的开放源码的规则引擎。 Drools使用RETE算法...
  • u011637069
  • u011637069
  • 2016-06-28 17:57:48
  • 628
收藏助手
不良信息举报
您举报文章:装饰器模式应用--动态规则引擎
举报原因:
原因补充:

(最多只允许输入30个字)