/**
* Created by zgq on 2019/6/9 16:31
*/
public interface Strategy {
void selectTravelMode();
}
//创建策略实现类
/**
* Created by zgq on 2019/6/9 16:33
*/
public class Airplane implements Strategy {
@Override
public void selectTravelMode() {
System.out.println("选择飞机出行");
}
}
/**
* Created by zgq on 2019/6/9 16:33
*/
public class Car implements Strategy {
@Override
public void selectTravelMode() {
System.out.println("选择汽车出行");
}
}
/**
* Created by zgq on 2019/6/9 16:33
*/
public class Train implements Strategy {
@Override
public void selectTravelMode() {
System.out.println("选择火车出行");
}
}
//创建主体对象类(环境类)
/**
* Created by zgq on 2019/6/9 16:35
*/
public class Tourist {
private Strategy mStrategy;
public Tourist(Strategy strategy){
this.mStrategy=strategy;
}
public void selectTravelMode(){
mStrategy.selectTravelMode();
}
}
//使用策略模式
/**
* Created by zgq on 2019/6/9 16:31
*/
public class StrategyModeTest {
public static void test(){
//创建策略
Strategy airplane=new Airplane();
Strategy car=new Car();
Strategy train=new Train();
//创建主体对象
Tourist tourist=new Tourist(airplane);
tourist.selectTravelMode();
tourist=new Tourist(car);
tourist.selectTravelMode();
tourist=new Tourist(train);
tourist.selectTravelMode();
}
}
1. 什么是策略模式?有什么作用?
策略模式是指类的行为或者算法可以在运行时动态更改,属于行为型设计模式。主要解决的问题是在算法相似的情况下,减少if。。。else带来的复杂和难于维护问题。
2. 如何实现?
以旅行的出行方式为例,可以选择汽车出游、火车出游、飞机出游等,实现一个简单的策略模式。实现代码如下: //创建策略抽象
//创建策略实现类
//创建主体对象类(环境类)
//使用策略模式
3. JDK或Android的应用举例
在jdk中,ThreadPoolExecutor中的四种拒绝策略使用了策略模式。在Android中,ListAdapter和TimeInterpolator中使用了策略模式。
4. 小结
策略模式主要解决动态替换算法的问题。 优点:
缺点:
状态模式和策略模式的对比: