有时需要支持对象的状态。据我所知,有两种方法:
显然需要将状态模式用于此类目的(我不确定)。
但阅读我经常面对的其他代码只是根本没有状态模式。 州模式是否有权力?
答案 0 :(得分:12)
通常,ENUM方法涉及某种状态和转换的表(数组)。而设计模式与对象实现相同。
如果你没有引用带有ENUM的表方法,那么解决方案需要涉及一个大的if / else if块,这是非常难以管理的。参考下面的部分,我认为很明显这个特殊的解决方案是劣等的。
以下是我列为每个
的PRO和CON的内容ENUM表格
优点:
缺点:
设计模式
优点:
缺点:
答案 1 :(得分:8)
为什么我们使用状态模式?删除条件逻辑复制,并用多态替换条件代码。
我们什么时候有条件逻辑复制?当我们有许多依赖于状态的动作时,你必须在每个动作中复制条件逻辑。当你有很多州时会变得很烦人。代码重复意味着您在添加新状态时应更新重复代码的每个副本。
因此,如果我没有重复的条件逻辑,我宁愿选择基于枚举的状态,而不是创建具有许多状态类的新类层次结构。有时我甚至更喜欢条件逻辑复制:例如当我有很多州,但只有很少的国家依赖行动。在这种情况下,我更喜欢有两个开关块而不是创建十个新类。