策略设计模式介绍:设计模式——策略模式的实践和应用(上)
策略设计模式实践:设计模式——策略模式的实践和应用(下)
策略模式
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 StrategyContext 对象的执行算法。
策略模式中一般会涉及到三个角色:
策略接口 Strategy:用来约束一系列具体的策略算法,策略上下文角色 StrategyA 使用此策略接口来调用具体的策略所实现的算法。
具体策略实现角色StrategyA、
StrategyB:具体的策略实现,即具体的算法实现。
策略上下文 StrategyContext:负责和具体的策略实现,通常策略上下文对象会持有一个真正的策略实现对象,策略上下文还可以让具体的策略实现从其中获取相关数据,回调策略上下文对象的方法。
抽象策略接口 Strategy :
public interface Strategy {
// 策略接口
void process();
}
具体的策略实现类 StrategyA:
public class StrategyA implements Strategy {
@Override
public void process() {
System.out.println("执行策略A");
}
}
具体的策略实现类 StrategyB:
public class StrategyB implements Strategy {
@Override
public void process() {
System.out.println("执行策略B");
}
}
策略上下文 StrategyContext:
public class ContextStrategy {
private Strategy strategy;
public ContextStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void executeStrategy() {
strategy.process();
}
}
策略设计模式测试StrategyPatternDemo:
public class StrategyPatternDemo {
public static void main(String[] args) {
//创建策略上下文的同时,将策略实现对象注入到策略上下文当中,根据不同的注入进行不同策略调用
ContextStrategy strategyA = new ContextStrategy(new StrategyA());
strategyA.executeStrategy();
ContextStrategy strategyB = new ContextStrategy(new StrategyB());
strategyB.executeStrategy();
}
}