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