使用策略模式时的一个生效问题

策略模式的替换场景:

1:产品有默认策略A,B,项目扩展策略C,此为正常扩展。

2:产品有默认策略A,B,项目需要改写策略B,此为项目替换默认策略。

3:产品有默认策略A,B,项目扩展策略C,产品需要反向扩展策略C,并对C进行修改。此时,由于项目的策略是先生成的,处于已使用的状态,产品属于是后补充,不能对项目C策略有影响。此为产品反向补充策略C.

也不知说明白没有,其实也简单,两个布尔值随便玩下

java 复制代码
public interface ColumnCondition{
	// 是否是产品出厂自带的策略
    default boolean isOriginal() {
        return false;
    }
	// 是否是项目替换的策略
    default boolean isReplace() {
        return false;
    }
	// 支持的策略标识
    boolean support(String businessCode);
	// 处理上下文
    void doBusiness(Context context);

判断逻辑如下:

java 复制代码
	@AutowiredFalse
    private List<ColumnCondition> columnConditions; // 所有策略

   public ColumnCondition matchColumnCondition(String businessCode) {
   		// 没有策略
        if (ListUtils.isEmptyList(columnConditions)) {
            return null;
        }

		// 匹配出支持当前code的策略
        List<ColumnCondition> matchConditions = ListUtils.collectCondition(this.columnConditions, c -> c.support(businessCode));
        if (ListUtils.isEmptyList(matchConditions)) {
            return null;
        }
        // 情况1:只有一种策略,直接使用即可
        if (ListUtils.isSingletonList(matchConditions)) {
            return matchConditions.get(FIRST);
        }

        // 情况2:项目替换产口的某条策略
        for (ColumnCondition matchCondition : matchConditions) {
            if (matchCondition.isReplace()) {
                return matchCondition;
            }
        }

        // 情况3:产品改写项目已有的策略,不对项目的该策略产生影响
        for (ColumnCondition matchCondition : matchConditions) {
            if (!matchCondition.isOriginal()) {
                return matchCondition;
            }
        }
        // 返回第一条策略:此处是不精确的,但也是能执行的。一般业务是能满足的
        return matchConditions.get(FIRST);
    }
相关推荐
意法半导体STM321 天前
【官方原创】如何为STM32CubeMX2配置Visual Studio Code配置方案
vscode·stm32·单片机·嵌入式硬件·策略模式·stm32cubemx·嵌入式开发
山东点狮信息科技有限公司2 天前
企业级 MES 制造执行系统架构设计与实践
spring cloud·性能优化·系统架构·策略模式·点狮
zzqssliu2 天前
基于策略模式与责任链的代购商品多源采集架构实战
架构·策略模式
mxpan3 天前
macOS 13+ 上使用 macFUSE + NTFS-3G 读写 NTFS 移动硬盘技术说明
macos·策略模式
折哥的程序人生 · 物流技术专研3 天前
Java 23 种设计模式:从踩坑到精通 | 番外:编排器+策略模式在多平台电子面单中的实战(含性能压测)
设计模式·策略模式·代码重构·java设计模式·编排器·电子面单·从踩坑到精通
忧云4 天前
2026年最新 Cursor 国内使用 DeepSeek API等各模型使用完整教程
ai编程·策略模式·cursor·byok·cursor使用国内大模型
AIex-YH4 天前
三域贯通11/12:生物制造的“死亡之谷“,CDMO 是桥还是船?
运维·制造·策略模式
回忆2012初秋5 天前
【Nginx】原理、配置与运维实战(2)
运维·nginx·策略模式
怎么没有名字注册了啊5 天前
macOS 基于 CSDN GitCode + Homebrew Tap 发布 Qt .app 二进制程序通用教程(homebrew 安装自己的软件)
策略模式·homebrew·formula·ruhy
坏小虎6 天前
macOS 安装 Ghostty 终端完整教程:环境、依赖与美化配置
macos·策略模式