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

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

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

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

        

        左侧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

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页