策略模式 Strategy Pattern(Policy)
意图:
定义一组算法,单独封装,使算法能够对使用它的上下文自由变化。
应用场景:
- 一组类只在行为(业务行为)上不同;
- 一个算法需要实现不同的变体;
- 向使用算法的上下文屏蔽算法具体数据结构
优缺点:
- 客户端对象必须选择具体策略
- 有可能破坏上下文对象的封装性
角色类:
Context 上下文
Startegy
ConcreteStrategy
类图:
代码:
- Context 上下文(也是客户端)
public class Context {
private List<Integer> data;
private Strategy strategy;
public List<Integer> request(){
strategy = new ConcreteStrategy1();
return strategy.sort(data);
}
}
- Strategy 策略接口
public interface Strategy {
public List<Integer> sort(List<Integer> data);
}
- ConcreteStrategy 具体策略实现类
public class ConcreteStrategy1 implements Strategy{
/*
* 策略一
*/
@Override
public List<Integer> sort(List<Integer> data) {
// TODO Auto-generated method stub
//比如:冒泡排序
return null;
}
}
public class ConcreteStrategy2 implements Strategy{
/*
* 策略二
*/
@Override
public List<Integer> sort(List<Integer> data) {
// TODO Auto-generated method stub
// 比如:插入排序
return null;
}
}