状态模式(State):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
白话:当一个对象存在很多个状态,不同的状态产生不同的行为,这样会产生复杂的逻辑分支代码,如果要新增一种状态,则要改变产生这种行为的方法,违背了“开放-封闭”原则;此时可以用状态模式:将这个对象的状态抽象出一个基类State,对象的每个状态则是State这个类的子类,在这些子类中改变原对象的行为。这样逻辑判断被转移到了各个子类中。增加状态则是增加一个类,很好的扩展。
角色:(1)Context:原对象类
(2)State:抽象状态
(3)ConcreateSateA等:具体状态
说明:
(1)Context类为对象类,State则是影响对象的状态类。
(2)State中Hanlde方法用来改变Context中的State
(3)Context中的Request则是呈现状态更改后的行为。
使用场景:
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
代码:
与策略模式的区别: