关于非Spring环境下策略模式自动匹配策略的方式

前言

最近做报文解析,不同交换机不同格式,大概有一百台交换机,我想解析用策略模式来写解析模板的方法的,但是写的时候发现,要先根据报文来决定用哪个实现类,这很麻烦。所以我就想用反射获取接口的所有实现类,先用实现类里面的校验方法,走都一边,哪个返回true了,就终止把他来出来,让他执行里面的解析。

环境

jdk8, hutool5.8.5

代码

寻找接口的实现类

    private static Set<Class<?>> getInstances(Class supClass) {
        String aPackage = ClassUtil.getPackage(supClass);
        Set<Class<?>> classes = ClassUtil.scanPackage(aPackage);
        return classes.stream().filter(sonClass -> {
            boolean allAssignableFrom = ClassUtil.isAllAssignableFrom(new Class[]{supClass},
                    new Class[]{sonClass});
            //要将 本身排除
            return allAssignableFrom && sonClass != supClass;
        }).collect(Collectors.toSet());
    }

注意,这里找的是接口同级或者在他的下一层才可以搜索的到,一般情况下写策略不会跨包的吧!

import cn.hutool.core.util.ClassUtil;
import cn.hutool.core.util.ReflectUtil;

import java.util.Set;
import java.util.stream.Collectors;

public class Test22 {

    public static void main(String[] args) throws Exception {
        Set<Class<?>> instances = getInstances(ParentInterface.class);
        for (Class<?> instance : instances) {
            Object o1 = ReflectUtil.newInstance(instance);
            Object result = ReflectUtil.invoke(o1, "log");
            System.out.println("result = " + result);
        }
    }
}

到这里我想已经可以明白,我要的就是要把所有的策略都放在一个集合里,spring项目中是自动会注入的,可参考下面这篇文章 《Java设计模式之3种策略模式实现》
当我们拿到匹配结果为true时可以进行解析了~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值