• GPT带我学-设计模式13-策略模式


    概述

    策略模式

    例子

    你可以创建一个策略工厂(Strategy Factory)来根据传入的 orgId 动态地选择合适的策略。以下是实现示例:

    1. 首先,定义策略接口和具体策略类:
    public interface CardPathStrategy {
        String generatePath();
    }
    
    public class OrganizationAStrategy implements CardPathStrategy {
        @Override
        public String generatePath() {
            return "path/for/organizationA";
        }
    }
    
    public class OrganizationBStrategy implements CardPathStrategy {
        @Override
        public String generatePath() {
            return "path/for/organizationB";
        }
    }
    
    1. 创建一个策略工厂 CardPathStrategyFactory 来根据 orgId 返回相应的策略:
    import java.util.HashMap;
    import java.util.Map;
    
    public class CardPathStrategyFactory {
        private static final Map<String, CardPathStrategy> strategies = new HashMap<>();
    
        static {
            strategies.put("orgA", new OrganizationAStrategy());
            strategies.put("orgB", new OrganizationBStrategy());
            // 添加更多策略
        }
    
        public static CardPathStrategy getStrategy(String orgId) {
            return strategies.get(orgId);
        }
    }
    
    1. 在你的业务逻辑中使用策略工厂:
    public class CardPathGenerator {
        public static void main(String[] args) {
            String orgId = "orgA";  // 这个可以是传入的参数
    
            CardPathStrategy strategy = CardPathStrategyFactory.getStrategy(orgId);
            if (strategy == null) {
                throw new IllegalArgumentException("No strategy found for orgId: " + orgId);
            }
    
            CardPathContext context = new CardPathContext(strategy);
            System.out.println(context.generateCardPath());  // 输出:path/for/organizationA
    
            orgId = "orgB";  // 更改组织ID
            strategy = CardPathStrategyFactory.getStrategy(orgId);
            if (strategy == null) {
                throw new IllegalArgumentException("No strategy found for orgId: " + orgId);
            }
    
            context.setStrategy(strategy);
            System.out.println(context.generateCardPath());  // 输出:path/for/organizationB
        }
    }
    

    通过这种方式,你可以根据传入的 orgId 动态地选择不同的策略。工厂类 CardPathStrategyFactory 负责管理策略的创建和选择逻辑,这使得代码更简洁且易于维护。

  • 相关阅读:
    TCP协议学习记录
    数据湖:数据库数据迁移工具Sqoop
    23. 合并 K 个升序链表
    第05章_存储引擎
    去雨去雪去雾算法本地实验速度对比
    C++,顺序结构,选择结构,循环结构
    minikube 部署
    语音合成 - TTS pyttsx3
    【虚拟机】Windows主机复制的内容,无法粘贴到Ubuntu虚拟机
    数据库学习之复合查询和内外连接
  • 原文地址:https://blog.csdn.net/qq_37398465/article/details/140309398