有时需要为对象的状态提供支持。据我了解,有两种方法:
- 枚举(简单)
- STATE模式(OC原理)
很明显,需要为此目的使用状态模式(我不确定)。
但是阅读我经常面对的其他代码只是枚举而不是状态模式。状态模式有权力吗?
有时需要为对象的状态提供支持。据我了解,有两种方法:
很明显,需要为此目的使用状态模式(我不确定)。
但是阅读我经常面对的其他代码只是枚举而不是状态模式。状态模式有权力吗?
通常,ENUM 方法涉及某种状态和转换的表(数组)。而设计模式在对象上实现了相同的效果。
如果您不是指使用 ENUM 的表方法,那么解决方案将需要涉及一个大的 if/else if 块,这是非常难以管理的。参考下面的部分,我认为这个特殊的解决方案很明显是劣等的。
以下是我将列出的每个优点和缺点
枚举表
优点:
缺点:
设计模式
优点:
缺点:
为什么我们使用状态模式?去除条件逻辑重复,用多态替换条件代码。
我们什么时候有条件逻辑重复?当我们有许多依赖于状态的动作时,您必须在每个动作中复制条件逻辑。当您有许多状态时,它变得非常烦人。此外,代码重复意味着您应该在添加新状态时更新重复代码的每个副本。
因此,如果我没有重复的条件逻辑,我宁愿使用基于枚举的状态,而不是创建具有许多状态类的新类层次结构。有时我什至更喜欢条件逻辑重复:例如,当我有很多状态,但只有很少的状态相关动作时。在这种情况下,我更喜欢有两个 switch 块而不是创建十个新类。