Posts

状态模式

在设计模式的语境下,有 SOLID 原则,其中 S 代表单一职责。

但是有时候出于用户交互的角度考虑,同一个组件会被不同的状态复用,比如最常见的,音乐播放器,再比如,一个面板同时承担对于数据项的 CRUD。

不经考虑,可能就设计出一个类中包含一个状态切换变量以及不同前缀的多套变量及方法,难以理解也难以维护。

状态模式正好可以解决这个问题,也非常容易进行单元测试。

状态模式的思路

需要注意的是,状态类中应只实现操作,从而可以手动创建对象,而无需在意其内部状态(引文不持有成员变量),所有的数据都在上下文类中。状态类只是将上下文类在不同状态下的操作代理出去了,上下文类持有一个抽象状态类型变量以及状态切换方法。

示例

ref