1. 简介
策略模式(Strategy)是设计模式中常见的一种行为型模式,它定义一系列算法,把它们封装起来,并且可以相互替换,让这些算法独立于使用它们的调用者。也就是把变化封装起来,面向接口编程而不是面向实现编程,体现了多用组合,少用继承的设计原则。
2. UML类图
Context类持有IStrategy的引用,IStrategy是一个抽象策略,为其它具体策略提供需要实现的方法。ConcreteStrategyA, ConcreteStrategyB, ConcreteStrategyC是具体的策略,封装了不同的算法,可以相互替换。
3. 实例
假如你要出去旅行,那么出行的交通方式会有很多种选择,根据需要的时间、费用、舒适度可以选择不同的交通工具,相当于有多种策略可以选择。
Context类:
public class Person{
private TravelStrategy strategy;
public void setTravelStrategy(TravelStrategy strategy) {
this.strategy = strategy;
}
public void travel() {
strategy.travel();
}
}
抽象策略:
public interface TravelStrategy {
void travel();
}
具体策略:
public class Train implements TravelStrategy {
public void travel() {
System.out.println("火车价格便宜,时间稍长");
}
}
public class Airplane implements TravelStrategy {
public void travel() {
System.out.println("飞机价格昂贵,时间短");
}
}
public class Bus implements TravelStrategy {
public void travel() {
System.out.println("大巴价格便宜,时间长,舒适度低");
}
}
测试:
public class Test {
public static void main(String[] args) {
Person person = new Person();
//选择飞机
person.setTravelStrategy(new Airplane());
person.travel();
//选择火车
person.setTravelStrategy(new Train());
person.travel();
}
}