简介
策略模式(Strategy Pattern)是一种比较简单的模式;定义一组算法,将每个算法封装起来,并且使它们之间可以互换。
优点:
- 算法可以自由切换。
- 避免使用多重条件判断。
- 扩展性良好。
缺点:
- 类会增多。
- 所有策略类都需要对外暴露。
类图
Context:封装角色,也叫做上下文角色,起承上启下封装作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化。
Strategy:抽象策略角色,一般为抽象类或者是接口,定义每个策略或算法必须具有的方法和属性
ConcreteStrategy:具体策略角色,实现抽象策略中的操作,该类含有具体的算法。
例:
实现
先创建Strategy接口:
public interface Strategy {
void operate();
}
三个实现类
public class AddStrategy implements Strategy {
@Override
public void operate() {
System.out.println("AddStrategy");
}
}
public class MulStrategy implements Strategy {
@Override
public void operate() {
System.out.println("MulStrategy");
}
}
public class SubStrategy implements Strategy {
@Override
public void operate() {
System.out.println("SubStrategy");
}
}
创建context类:这是整个策略模式的重点类
public class Context {
//具体使用的策略
private Strategy strategy;
//在构造方法中设置具体的策略
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void operate(){
strategy.operate();
}
}
场景类
public class Client {
public static void main(String[] args){
Context context ;
Strategy addStrateg = new AddStrategy();
context = new Context(addStrateg);
context.operate();
Strategy subStrategy = new SubStrategy();
context = new Context(subStrategy);
context.operate();
Strategy mulStrategy = new MulStrategy();
context = new Context(mulStrategy);
context.operate();
}
}