定义:当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了行为。也就是在不同的状态下有不同的响应。
特点:在写法上类似策略模式,但是策略模式各个具体类是可以替换的,因为各个具体类的行为是彼此独立的,意义是相同的。而状态模式的各个具体类是意义各自不同,不能相互替换,不同的状态代表着不同的行为。
使用场景:
1.一个对象的行为取决于它的状态,并且在运行时根据状态改变行为。
2.代码中有大量的关于状态有关的语句。比如if else
优点:能够将复杂的代码封装到类中,增加扩展性和灵活性。
缺点:增加类的数量
实现一个电视遥控器的功能:这里有两种状态:开机 关机
开机后的状态类
关机后的状态类
操作类的抽象
操作类
进行使用
有个实际应用的例子,就是处理登录的情况。对于频繁进行验证的情况下,比较好用。