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;
    }
相关推荐
IKUN家族4 小时前
Spring MVC(一)
java·spring·mvc
老马识途2.06 小时前
关于跨域问题的总结
java·前端
魔力女仆6 小时前
分享一个 JS 鼠标跟随贪吃蛇背景库
开发语言·javascript·计算机外设
都叫我大帅哥7 小时前
Java日期时间三十年战争:从Date考古到LocalDateTime革命,以及数据库与前端的那点事儿
java
Muscleheng7 小时前
SpringBoot 集成 DeepSeek 实现 RAG 文档问答
java·spring boot·ai·springai
2401_894915537 小时前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity
2501_936415697 小时前
可变参数&综合练习&斗地主游戏
java·windows·游戏
麻瓜老宋7 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十二步,分号赋值链式修复、TOKEN_ASSIGN
c语言·开发语言·atomcode
极客先躯8 小时前
高级java每日一道面试题-2026年05月03日-实战篇[Docker]-如何实现容器化环境的数据加密?
java·运维·docker·容器·金融·加解密·高级面试
xqqxqxxq9 小时前
Java Socket 多人聊天室(私聊+群聊)技术笔记(V4版本)
java·网络·笔记