如何不用枚举实现策略工厂
时间: 2024-09-06 14:06:22 浏览: 74
不使用枚举来实现策略工厂的方法通常涉及到使用映射(Map)来根据策略名称动态地创建策略实例。以下是实现策略工厂的一个基本步骤:
1. 定义策略接口:首先,定义一个策略接口,所有具体的策略实现都需要实现这个接口。
```java
public interface Strategy {
void execute();
}
```
2. 实现具体策略类:然后,为每种策略创建具体的实现类。
```java
public class ConcreteStrategyA implements Strategy {
@Override
public void execute() {
// 具体实现A
}
}
public class ConcreteStrategyB implements Strategy {
@Override
public void execute() {
// 具体实现B
}
}
```
3. 创建策略工厂:接着,实现一个策略工厂类,该类内部可以使用一个映射(Map)来关联策略名称和对应的策略实例。
```java
public class StrategyFactory {
private static final Map<String, Strategy> strategies = new HashMap<>();
static {
strategies.put("StrategyA", new ConcreteStrategyA());
strategies.put("StrategyB", new ConcreteStrategyB());
// 可以添加更多的策略映射
}
public static Strategy getStrategy(String name) {
if (name == null || name.isEmpty()) {
throw new IllegalArgumentException("Strategy name cannot be null or empty.");
}
return strategies.get(name);
}
}
```
4. 使用工厂获取策略实例:最后,在客户端代码中使用工厂类来获取具体的策略实例并执行策略方法。
```java
public class Client {
public static void main(String[] args) {
Strategy strategyA = StrategyFactory.getStrategy("StrategyA");
strategyA.execute();
Strategy strategyB = StrategyFactory.getStrategy("StrategyB");
strategyB.execute();
}
}
```
这种方法通过映射动态地关联策略名称和对应的策略实例,避免了枚举的使用,同时保持了策略模式的灵活性和扩展性。策略工厂可以根据实际需要动态地增加或删除策略映射。
阅读全文