概念
通过定义算法家族,分别分装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
代码
抽象算法
public abstract class Strategy {
public abstract void algorithm ();
}
具体算法
public class StrategyA extends Strategy {
@Override
public void algorithm() {
System.out.println("执行策略A的算法");
}
}
public class StrategyB extends Strategy {
@Override
public void algorithm() {
System.out.println("执行策略B的算法");
}
}
维护类
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void execute(){
strategy.algorithm();
}
}
public class StrategyC extends Strategy {
@Override
public void algorithm() {
System.out.println("执行策略C的算法");
}
}
客户端
public class Client {
public static void main(String[] args) {
Context context;
context = new Context(new StrategyA());
context.execute();
context = new Context(new StrategyB());
context.execute();
context = new Context(new StrategyC());
context.execute();
}
}
// 执行策略A的算法
// 执行策略B的算法
// 执行策略C的算法
特点
使用策略模式可以对算法族中的算法分别封装,同时实现消除条件语句的功能。