在策略模式中,通常有以下角色:
1. 上下文(Context): 维护一个对策略对象的引用,可以在运行时切换算法。
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void executeStrategy() {
strategy.execute();
}
}
2. 策略接口(Strategy): 定义了算法的接口,具体的算法实现将实现该接口。
public interface Strategy {
void execute();
}
3. 具体策略(ConcreteStrategy): 实现了策略接口,提供了具体的算法实现。
public class ConcreteStrategyA implements Strategy {
@Override
public void execute() {
System.out.println("Executing strategy A");
}
}
public class ConcreteStrategyB implements Strategy {
@Override
public void execute() {
System.out.println("Executing strategy B");
}
}
4. 客户端代码: 创建上下文对象,将具体的策略对象传递给上下文,并调用上下文的方法执行具体的算法。
public class Client {
public static void main(String[] args) {
// 创建上下文对象,初始策略为ConcreteStrategyA
Context context = new Context(new ConcreteStrategyA());
// 执行策略A
context.executeStrategy();
// 切换到策略B
context.setStrategy(new ConcreteStrategyB());
// 执行策略B
context.executeStrategy();
}
}
在这个例子中,Context 类维护了一个对 Strategy 接口的引用,客户端可以通过调用 setStrategy 方法在运行时切换具体的算法。ConcreteStrategyA 和 ConcreteStrategyB 分别是两个具体的算法实现。
策略模式使得算法可以独立于客户端而变化,客户端代码不需要知道具体的算法,只需与 Strategy 接口进行交互。这提高了代码的灵活性和可维护性。
转载请注明出处:http://www.zyzy.cn/article/detail/13959/设计模式