策略模式
定义
策略模式定义了一系列算法,并将每一个算法封装起来,而且他们可以相互替换,让算法独立于使用他们的客户而独立变化。其实可以简单的这么理解,策略模式就是将某一个行为的各种实现(即方法)抽象出一个公共的接口,这样客户就可以调用接口,但是接口里面的具体实现却可以随意更换。
结构
- 环境(即使用该接口的对象)(Context):持有一个抽象策略的引用
- 抽象策略(Strategy):一般是一个接口,规定了具体策略应该实现的方法
- 具体策略(ConcreteStrategy):实现了抽象策略
类图
缺点
- 客户端必须知道所有的策略类,并决定使用哪一个
- 会生成很多的策略类,每一个具体的策略都会产生一个新类
例子
interface MyStrategy {
void vehicle();
}
class CarStrategy implements MyStrategy {
public void vehicle() {
System.out.println("开车去....");
}
}
class BikeStrategy implements MyStrategy {
public void vehicle() {
System.out.println("骑自行车去...");
}
}
class BusStrategy implements MyStrategy {
public void vehicle() {
System.out.println("坐公交车去...");
}
}
class Student {
private MyStrategy strategy;
public Student(){}
public Student(MyStrategy s) {
strategy = s;
}
public void setStrategy(MyStrategy s) {
strategy = s;
}
public MyStrategy getStrategy() {
return strategy;
}
public void toLibrary() {
strategy.vehicle();
}
}
public class StrategyTest {
public static void main(String[] args) {
Student s = new Student();
MyStrategy strategy = new BikeStrategy();
s.setStrategy(strategy);
s.toLibrary();
}
}