意图:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
何时使用:代码中包含大量与对象状态有关的条件语句。
优点: 1、封装了转换规则,减少相互依赖。 2、将不同的状态隔离。 3、将所有与某个状态有关的行为放到一个类中。 4、可以方便地增加新的状态。 5、可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。
缺点: 1、增加类和对象的个数。 2、结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。 3、对”开闭原则”的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,而且修改某个状态类的行为也需修改对应类的源代码。
使用场景: 1、一个对象存在多个状态,且状态可以相互转换。 2、条件、分支语句的代替者。
状态模式 - 图1
状态模式 - 图2
状态模式 - 图3

问答

image.png
image.png
image.png