阅读量:2
概述
策略模式
例子
你可以创建一个策略工厂(Strategy Factory)来根据传入的 orgId
动态地选择合适的策略。以下是实现示例:
- 首先,定义策略接口和具体策略类:
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"; } }
- 创建一个策略工厂
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); } }
- 在你的业务逻辑中使用策略工厂:
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
负责管理策略的创建和选择逻辑,这使得代码更简洁且易于维护。