状态模式(State):允许一个对象在其内部状态改变时改变他的行为
很多情况下,我们对象的行为依赖他自身的一个或者多个属性的变化,这种属性的变化我们称为状态。也就是说对象自身的行为依赖了状态。状态改变后,导致了改变了他的行为。从因果关系来分析问题:起因就是状态变化,结果影响了自身的行为变化。所以我们站在 状态的角度的时候,这就是 状态模式。
根据上面的代码,若新增一个状态就是则需要 新增一个实现类即可。不需要 大量的if-else语句来判断逻辑。符合 “开闭原则”。上面的Home类就是相当于一个 Context环境类,他依赖了对应的状态父类。
------------------------------------ 状态模式和 策略模式的对比 ------------------------------------------------------
状态模式的类图与策略模式一模一样,区别在于它们的意图。策略模式会控制对象使用什么策略,而状态模式会自动改变状态。