注解实现策略模式

代码结构如下

代码如下

java 复制代码
@Getter
@AllArgsConstructor
public enum AuditPlutusEnum {

    BACK("回款"),

    REFUND("退款"),

    INVOICE("开票");

    private final String name;
}
java 复制代码
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Component
public @interface AuditStrategyType {

    @AliasFor(annotation = Component.class)
    String value() default "";

    AuditPlutusEnum type();


}
java 复制代码
 */
@Configuration
public class AuditStrategyConfig {

    @Bean
    public AuditStrategyRunner auditStrategyRunner(List<AuditPlutusStrategy> strategies) {
        Map<AuditPlutusEnum, AuditPlutusStrategy> strategyMap = strategies.stream()
                .collect(Collectors.toMap(
                        // 获取策略标识
                        s -> s.getClass().getAnnotation(AuditStrategyType.class).type(),
                        s -> s
                ));
        return (flag, auditPlutusRo) -> strategyMap.get(flag).audit(auditPlutusRo);
    }
}
java 复制代码
public interface AuditStrategyRunner {


    void audit(AuditPlutusEnum type, AuditPlutusRo auditPlutusRo);
}
java 复制代码
public interface AuditPlutusStrategy {


    void audit(AuditPlutusRo ro);
}
java 复制代码
@AuditStrategyType(type = AuditPlutusEnum.REFUND)
public class AuditRefundStrategy implements AuditPlutusStrategy {

    @Override
    public void audit(AuditPlutusRo ro) {
        // todo: 2024/1/24  退款相关处理
    }
}```

```java
@AuditStrategyType(type = AuditPlutusEnum.INVOICE)
public class AuditInvoiceStrategy implements AuditPlutusStrategy {

    @Override
    public void audit(AuditPlutusRo ro) {
        // todo: 2024/1/24  开票相关处理
    }
}
java 复制代码
@AuditStrategyType(type = AuditPlutusEnum.BACK)
public class AuditBackStrategy implements AuditPlutusStrategy {

    @Override
    public void audit(AuditPlutusRo ro) {
        // todo: 2024/1/24  回款相关处理
    }
}

调用

java 复制代码
    @Autowired
    private AuditStrategyRunner auditStrategyRunner;

    public ResultData<?> auditBack(AuditPlutusRo ro) {
        log.info("【{}】审核-业财回调处理,审核编号为:{},传入参数为:{}", ro.getAuditPlutusEnum().getName(), ro.getAuditNo(), JSON.toJSONString(ro));
        auditStrategyRunner.audit(ro.getAuditPlutusEnum(), ro);
        return ResultData.SUCCESS;
    }
相关推荐
小呀小萝卜儿25 分钟前
2025-11-15 学习记录--Python-LSTM模型定义(PyTorch)
python·学习·lstm
百锦再1 小时前
第15章 并发编程
android·java·开发语言·python·rust·django·go
laufing1 小时前
pyinstaller 介绍
python·构建打包
小龙报1 小时前
《DevC++支持C++11等与其软件分辨率低的解决办法》
c语言·c++·windows·蓝桥杯·pat考试·学习方法·dvc++
谅望者1 小时前
数据分析笔记09:Python条件语循环
笔记·python·数据分析
Auspemak-Derafru2 小时前
从U盘损坏中恢复视频文件并修复修改日期的完整解决方案
python
techzhi2 小时前
Intellij idea 注释模版
java·python·intellij-idea
李昊哲小课2 小时前
wsl ubuntu24.04 cuda13 cudnn9 pytorch 显卡加速
人工智能·pytorch·python·cuda·cudnn
温暖名字3 小时前
调用qwen3-omni的api对本地文件生成视频文本描述(批量生成)
python·音视频·qwen·qa问答
一眼万里*e3 小时前
搭建个人知识库
python