目录
策略模式很类似现在多功能的洗衣机,每次在洗衣服之前,都需要由用户自己选择想要的洗衣策略,洗衣机收到指定的洗衣策略后,组合成一份新的算法和数据结构才去执行。

Strategy Pattern and State Pattern
策略模式和状态模式的区别在于使用者对它们的目的。
策略模式主要用于实现算法的选择和动态切换,强调的是不同策略的独立性和替换性。
状态模式主要用于根据对象的内部状态来改变对象的行为,强调的是对象状态的变化和相应行为的变化。
但其实,你把这个状态想成策略,策略替换成状态,也没啥区别。
Strategy Pattern and Polymorphism
策略模式和多态在使用场景上,还是很类似的。
但总体来说,策略模式更像多态的升级版本,策略模式更灵活,它依靠接口,而不是继承,所以有更多操作空间。
如果设计的程序比较小,不是那么复杂,使用多态就行,如果稍微大型(复杂)一点,考虑用策略模式。
What is Strategy Pattern and State Pattern
将类的行为和状态绑定在一起,不同的状态对应不同的行为。
将类的行为和策略绑定在一起,不同的策略对应不同的行为。
Key Elements
- 环境(Context):维护一个当前状态对象的引用,负责将请求委派给当前状态对象来处理。
 - 抽象状态(State):定义了一个接口,用于封装与环境对象的特定状态相关的行为。
 - 具体状态(Concrete State):实现了抽象状态接口,定义了该状态下具体的行为。
 - Client
 
Strategy Pattern VS State Pattern
我在网上找了两个模式的简单示例代码,经过对比分析,唯一的不同就是状态和策略这两个类的名字不一样,其他都是
1.

2.

3.

Strategy Pattern example - Computer and USB interface
现代人对计算机、USB接口还有各种设备之间的关系都很熟悉,而这些由模块组成的系统正是策略模式的最好范例。
- 定义策略的接口
 
public interface USB {
    public void read();
}
- 接口实现 —— 每个接口实现类就是单个策略
为了保持简单,我们只为USB接口定义一个读取数据方法read(),
接下来就是各种USB设备实现类了,其中键盘、鼠标分别定义各自的实现类。 
public class KeyBoard implements USB{
    @Override
    public void read() {
        System.out.println("读取键盘数据...");
    }
}
public class Mouse implements USB{
    @Override
    public void read() {
        System.out.println("读取鼠标数据...");
    }
}
- 计算机主类
所有USB设备类都实现了USB接口的读取数据方法read(),如键盘设备捕获的是键盘指令数据,鼠标设备捕获的是坐标与点击指令数据。最后,我们需要将它们与计算机主机进行接驳起来。 
public class Computer {
    private USB usb;
    public void setUSB(USB usb){
        this.usb = usb;
    }
    public void execute(){
        usb.read();
    }
}
- use
接驳起来之后,只需要根据场景设置好USB设备对象,调用电脑的.do方法即可。 
public static void main(String[] args) {
    Computer computer = new Computer();
    computer.setUSB(new KeyBoard());
    computer.execute();
    computer.setUSB(new Mouse());
    computer.execute();
}
Input:
读取键盘数据...
读取鼠标数据...
Example —— 扫描器基于自定义配置切换不同扫描策略
todo
Usage Scenarios
先来看看阿里的开发手册

Reference
Java Polymorphism Concept
https://www.cnblogs.com/mysticbinary/p/17645988.html
Java开发手册(嵩山版).pdf
https://www.haicheng.website/download/book/Java开发手册(嵩山版).pdf
                    
                
                
            
        
浙公网安备 33010602011771号