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

avatar
作者
筋斗云
阅读量:2

概述

策略模式

例子

你可以创建一个策略工厂(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 负责管理策略的创建和选择逻辑,这使得代码更简洁且易于维护。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!