定义
允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
角色
Context: 环境类。可以包括一些内部状态。
State: 抽象状态类。State定义了一个所有具体状态的共同接口,任何状态都实现这个相同的接口,这样一来,状态之间就可以互相转换了。
ConcreteState: 具体状态类。具体状态类,用于处理来自Context的请求,每一个ConcreteState都提供了它对自己请求的实现,所以,当Context改变状态时行为也会跟着改变
适用场景
1、对象的行为依赖于它的状态(属性)并且可以根据它的状态改变而改变它的相关行为。
2、代码中包含大量与对象状态有关的条件语句
类图
示例
糖果机的处理
引申
模板方法模式:有子类决定如何实现算法中的某些步骤
状态模式:封装基于状态的行为,并将行为委托到当前状态
策略模式:将可以互换的行为封装其来,然后使用委托的方法,决定使用哪一个行为