java策略模式

第一步:创建一个接口继承 InitializingBean

java 复制代码
public interface IStrategy extends InitializingBean {
    public Boolean executeConsumer();
}

第二步:创建工厂方法

java 复制代码
public class ContextFactory {
    private static final HashMap<String, IStrategy> contextMap = new HashMap<>();

    /**
     *
     * 注册
     * @param name 策略名称
     * @param strategy 策略类
     */
    public static void register(String name, IStrategy strategy){
        if (StringUtils.isEmpty(name) || Objects.isNull(strategy)) {
            return;
        }
        contextMap.put(name, strategy);
    }

    /**
     * 根据name获取对应的contextMap实现
     *
     * @param name 策略名称
     * @return
     */
    public static IStrategy getInvokeStrategyMap(String name) {
        Assert.isFalse(StringUtils.isBlank(name), "策略名称不能为空!");
        Assert.isFalse(Objects.isNull(contextMap.get(name)), "未找到对应的策略实现!");
        return contextMap.get(name);
    }
}

第三步:写实现类

java 复制代码
@Slf4j
@Service
@RequiredArgsConstructor
public class HospitalizedAssessStrategyImpl implements IStrategy {

    /**
     * 生成对应的策略名称
     */
    @Override
    public  void afterPropertiesSet() {
        ContextFactory.register( "入院评估",this);
    }

    @Override
    public Boolean executeConsumer() {
        System.out.println("测试策略!");
        return null;
    }
}

第四步:调用

java 复制代码
   @Override
    protected boolean doExecuteBusiness(MessageExt messageExt) {
        String message = getMessageBody(messageExt);
        log.info("主题:{},收到消息:{},msgId:{}", messageExt.getTopic(), message, messageExt.getMsgId());
        //新增入院评估
        IStrategy strategy = ContextFactory.getInvokeStrategyMap("入院评估");
        strategy.executeConsumer();

        return true;
    }
相关推荐
沐雨风栉1 分钟前
用 Kavita+cpolar 把数字书房装进口袋
服务器·开发语言·数据库·后端·golang
E_ICEBLUE15 分钟前
Excel vs CSV:在系统数据处理中该如何选择?
java·excel·csv·格式转换
Henry Zhu12321 分钟前
Qt Model/View架构详解(二):内置视图与模型
开发语言·qt
chao18984434 分钟前
在Qt中实现任意N阶贝塞尔曲线的绘制与动态调节
开发语言·qt
真正的醒悟1 小时前
什么是标准等保架构
开发语言·php
郑州光合科技余经理1 小时前
同城020系统架构实战:中台化设计与部署
java·大数据·开发语言·后端·系统架构·uni-app·php
LcVong1 小时前
Android 25(API 25)+ JDK 17 环境搭建
android·java·开发语言
苏宸啊1 小时前
C++string(一)
开发语言·c++
老鱼说AI1 小时前
深入理解计算机系统1.5:抽象的重要性:操作系统与虚拟机
c语言·开发语言·汇编
a程序小傲1 小时前
高并发下如何防止重复下单?
java·开发语言·算法·面试·职场和发展·状态模式