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

策略模式的替换场景:

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);
    }
相关推荐
harder32118 小时前
RMP模式的创新突破
开发语言·学习·ios·swift·策略模式
ximu_polaris1 天前
设计模式(C++)-行为型模式-策略模式
c++·设计模式·策略模式
原来是猿3 天前
线程安全的单例模式
linux·服务器·开发语言·单例模式·策略模式
Mr_linjw4 天前
策略模式简介
策略模式
故乡de云4 天前
Cursor + Claude Code 接入 API 实战:国内稳定使用 Claude 4.7 配置全攻略
大模型·ai编程·策略模式·claude·cursor·claude code
原来是猿4 天前
Linux线程同步与互斥(四):日志系统与策略模式
linux·运维·开发语言·策略模式
许国栋_5 天前
ESG驱动下的产品战略调整:企业该如何从合规走向竞争力重构?
安全·产品运营·产品经理·策略模式
周末也要写八哥6 天前
策略模式的思想的经典案例分析
策略模式
AC赳赳老秦6 天前
OpenClaw与Excel联动:批量读取/写入数据,生成可视化报表
开发语言·python·excel·产品经理·策略模式·deepseek·openclaw
lwf0061647 天前
解决macOS .dmg 文件无法安装问题
macos·策略模式