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;
    }
相关推荐
星辰离彬3 分钟前
Java 与 MySQL 性能优化:Java应用中MySQL慢SQL诊断与优化实战
java·后端·sql·mysql·性能优化
开开心心_Every25 分钟前
便捷的Office批量转PDF工具
开发语言·人工智能·r语言·pdf·c#·音视频·symfony
程序猿小D2 小时前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的个人财务管理系统,推荐!
java·数据库·mysql·spring·毕业论文·ssm框架·个人财务管理系统
佛祖让我来巡山2 小时前
【工厂和策略设计模式妙用】解决接口选择与多重if-else 问题
设计模式·策略模式·工厂模式
转转技术团队2 小时前
二奢仓店的静默打印代理实现
java·后端
liulilittle3 小时前
LinkedList 链表数据结构实现 (OPENPPP2)
开发语言·数据结构·c++·链表
钢铁男儿3 小时前
C# 接口(什么是接口)
java·数据库·c#
丶小鱼丶3 小时前
排序算法之【归并排序】
java·排序算法
上上迁3 小时前
分布式生成 ID 策略的演进和最佳实践,含springBoot 实现(Java版本)
java·spring boot·分布式
永日456703 小时前
学习日记-spring-day42-7.7
java·学习·spring