软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。汇总目录链接:【玩转23种Java设计模式】学习目录汇总整理
一、简介
策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。
策略模式,定义了一组算法(业务规则),封装了每个算法,这族的算法可互换代替(interchangeable)。
它的组成:
- 抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
- 具体策略角色:包装了相关的算法和行为。
- 环境角色:持有一个策略类的引用,最终给客户端调用。
二、实例
1、策略接口类(Strategy)
public interface Strategy {
void travelStrategy();
}
2、飞机策略实现类(AirplaneStrategy)
public class AirplaneStrategy implements Strategy {
@Override
public void travelStrategy() {
System.out.println("乘坐飞机出游");
}
}
3、火车策略实现类(TrainStrategy)
public class TrainStrategy implements Strategy {
@Override
public void travelStrategy() {
System.out.println("乘坐火车出游");
}
}
4、环境类(Context)
策略对象改变 context 对象的执行算法。
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void travel() {
strategy.travelStrategy();
}
}
5、测试类
public class Main {
public static void main(String[] args) {
Context context = new Context(new AirplaneStrategy());
context.travel();
}
}
控制台输出:
乘坐飞机出游
三、总结
1、优点
- 算法可以自由切换。
- 避免使用多重条件判断,解决了所谓的if-else问题。
- 扩展性良好。
2、缺点
- 策略类会增多。
- 所有策略类都需要对外暴露。
3、应用场景
- 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
- 一个系统需要动态地在几种算法中选择一种。
- 如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。