1 介绍
策略模式适用于一个问题有多种解决方案的情况。
2 例子
假如在一个幼儿园大班,老师问怎么才能通过数学计算得到6这个数字,每个小朋友的方案都不一样,使用策略模式就非常方便了。
2.1 策略父类(老师的问题)
interface Strategy{
void get6();
}
2.2 不同的策略
//加法策略
class Add implements Strategy{
@Override
public void get6() {
System.out.println("3+3可以得到6");
}
}
//减法策略
class Sub implements Strategy{
@Override
public void get6() {
System.out.println("7-1可以得到6");
}
}
//乘法策略
class Mul implements Strategy{
@Override
public void get6() {
System.out.println("2×3可以得到6");
}
}
2.3 策略拥有者
class Student{
private Strategy strategy;
Student(Strategy strategy){
this.strategy=strategy;
}
//展示这个同学得到6的策略
void showStrategy(){
this.strategy.get6();
}
}
2.4 测试主类
public class Main {
public static void main(String[] args) {
//创建同学
Student xiaoming=new Student(new Add());
Student xiaohong=new Student(new Sub());
Student xiaogang=new Student(new Mul());
//说出各自的策略
xiaoming.showStrategy();
xiaohong.showStrategy();
xiaogang.showStrategy();
}
}
3 总结
3.1 核心角色
- 策略父类:声明需要解决的问题。
- 策略子类:解决的这个问题的具体实现。
- 策略拥有者:谁拥有(执行)这个策略。
3.2 核心代码结构
其实本质就是一个抽象类的不同实现。注意和状态模式的区别,状态模式强调的是类的功能方法随着对象的变换而变化,但是策略模式强调为解决一个问题的不同方法。