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;
    }
相关推荐
крон16 分钟前
【Auto.js例程】华为备忘录导出到其他手机
开发语言·javascript·智能手机
zh_xuan1 小时前
c++ 单例模式
开发语言·c++·单例模式
coderSong25681 小时前
Java高级 |【实验八】springboot 使用Websocket
java·spring boot·后端·websocket
老胖闲聊1 小时前
Python Copilot【代码辅助工具】 简介
开发语言·python·copilot
Blossom.1181 小时前
使用Python和Scikit-Learn实现机器学习模型调优
开发语言·人工智能·python·深度学习·目标检测·机器学习·scikit-learn
Mr_Air_Boy2 小时前
SpringBoot使用dynamic配置多数据源时使用@Transactional事务在非primary的数据源上遇到的问题
java·spring boot·后端
曹勖之2 小时前
基于ROS2,撰写python脚本,根据给定的舵-桨动力学模型实现动力学更新
开发语言·python·机器人·ros2
豆沙沙包?2 小时前
2025年- H77-Lc185--45.跳跃游戏II(贪心)--Java版
java·开发语言·游戏
军训猫猫头3 小时前
96.如何使用C#实现串口发送? C#例子
开发语言·c#
年老体衰按不动键盘3 小时前
快速部署和启动Vue3项目
java·javascript·vue