状态模式与 ENUM

2024-03-28

有时需要支持对象的状态。据我了解有两种方法:

  1. 枚举(简单)
  2. STATE模式(OC原理)

显然需要使用状态模式来达到这样的目的(我不确定)。

但是阅读其他代码时,我经常遇到的只是枚举而不是状态模式。 状态模式有权力吗?


通常,ENUM 方法涉及某种状态和转换的表(数组)。而设计模式对对象实现了相同的效果。

如果您没有引用带有 ENUM 的表方法,那么解决方案将需要涉及大量的 if/else if 块,这是相当难以管理的。参考下面的部分,我认为很明显这个特定的解决方案是较差的。

以下是我列出的每个优点和缺点

枚举表

PROs:

  • 由于表是在一处定义的,因此更容易查看所有状态和转换

CONs:

  • 状态和转换更多硬编码的并且需要更多的代码更改来扩展

设计模式

PROs:

  • 通过添加新对象更容易扩展新状态。 (开闭原理)
  • 更容易确保所有信号都由状态处理,因为基类应该将信号定义为抽象函数。
  • 通过从状态派生更容易扩展特定状态的行为。状态模式应该将特定状态的行为放在一个对象中。

CONs:

  • 通过查看代码来了解所有状态及其关系更加困难,因为它们分散在几个不同的类中。
  • 最终可能会创建数量无法管理的对象。但将此与相应 ENUM 解决方案所需的相应 if/else 块进行比较。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

状态模式与 ENUM 的相关文章

  • Flask框架:MVC模式

    Flask框架天然支持MVC模式吗 我应该将应用程序的哪些部分视为模型 什么部分视为视图 什么部分视为控制器 通常 根据我的经验 Flask 应用程序如下所示 main dir app1 init py api py models py s
  • Rails:用空对象模式替换 try

    在我的大多数应用程序中 我都有一个current user方法 为了避免在类似情况下出现异常current user name where current user is nil rails 提供了try方法 问题是我需要记住使用try无论
  • 如何在泛型类中映射默认 LINQ 表达式

    我有一个通用的Repo公开数据库 LINQ 提供程序的类 class Repo
  • 如何设计插件系统才能不浪费这么多资源?

    我正在尝试建立一个基本的插件系统 https stackoverflow com a 3356922 99923就像您在 WordPress 等 CMS 中常见的那种 您有一个插件文件夹 它们通过使用事件通知的方式与主系统的操作相关联Obs
  • 处理第三方API时正确的系统设计是什么?

    This 博客文章 http blog njoubert com 2010 12 structuring iphone apps design principles html朱伯特刚刚睁开了我的眼睛 我接触过很多 Java 和其他语言的设计
  • Java 装饰器模式:我可以装饰受保护的方法吗?

    我想要Decorate 装饰器设计模式 一个通用的基类 但是我需要的方法Decorate受到保护 参见示例 public class AbstractActor public void act Delegates its actions t
  • 如果我在实现工厂模式时使用抽象类而不是接口。它仍然是工厂模式吗?

    例如 http www tutorialspoint com design pattern factory pattern htm http www tutorialspoint com design pattern factory pat
  • 如何在c#中创建一个完美的Singleton类?

    我想用 Singleton 类存储一些数据 据我研究 单例类只能实例化一次 但这对我不起作用 有人可以更正我的代码吗 public class MvcApplication System Web HttpApplication Single
  • JavaFx 如何避免创建一个巨大的控制器

    我在 JavaFX 中有一个应用程序 它有带有菜单和工具栏的主场景 以及在按下菜单按钮之一后注入到该主场景中的较小场景 现在 HomeCntroller 负责场景组件 主场景 带有工具栏和菜单 和注入场景 如果注入的场景数量超过一个 这会导
  • 提供 REST Web 服务的 JEE6 企业应用程序应该如何组织?

    从一个月前开始 我正在努力学习宁静的网络服务 现在我已经练习了语法并且理解了概念 我决定制作一个非常简单的企业应用程序 其中包括 EJB JPA 和 REST 我正在付出巨大的努力来尝试了解组织这种系统的最佳方式是什么 如果在该领域有经验的
  • 具体来说,什么属于模型、视图和控制器?

    我一直在学习模型 视图 控制器范例 MVC 但我很困惑 因为有些教程与其他教程相矛盾 我目前对这个过程的理解是这样的 路由器 调度器 前端控制器 尽管 MVC 名称中没有具体提及 但 Router 仍然是一个非常重要的部分 正是在这里 请求
  • NSFetchedResultsController 在 VIPER 架构中的位置是什么?

    In VIPER https www objc io issues 13 architecture viper 与MVC不同的是 NSFetchedResultsController的角色和地点没有那么明确的定义 把它放在交互器上合适吗 根
  • 使用状态模式设计在Java中实现通信协议

    如果在其他地方回答了这个问题 我们深表歉意 找不到足够的信息来说服自己最好的方法来做到这一点 我还意识到这是一个冗长的解释 没有代码 但是让我知道我是否应该编写一些示例代码来帮助演示我正在做的事情 基本上 使用 System in out
  • 为什么所有的 Active Record 都讨厌? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Meyers 的单例实现实际上是如何实现单例的

    我读了很多关于单例的内容 什么时候应该使用它们 什么时候不应该使用它们 以及如何安全地实现它们 我正在用 C 11 编写 并且遇到了 Meyer 的单例延迟初始化实现 如所示这个问题 https stackoverflow com ques
  • 注册模式和注册对象的延迟实例化

    让我们想象一下我们有注册表模式
  • 寻找一种重构 D3.js 风格的方法链接模式的方法

    在学习 D3 js 时 我遇到了博客文章 http bost ocks org mike chart 解释其可重用代码单元背后的主要设计模式 我复制了下面的相关代码 下面呈现的模式的方式正是在 D3 代码库和插件中使用的方式 example
  • 这叫什么类型的建筑?

    对于我当前正在开发的 Web 应用程序 ASP NET MVC 我们采用以下架构 Data Access Layer 将数据持久保存到任意数据库的逻辑 Domain 数据模型 Service Layer 业务逻辑 例如订单处理 账户管理等
  • 为什么要分离接口和实现?

    在生产代码中 我经常看到定义如下的类 public interface SomeComponent Some methods public class SomeComponentImpl implements SomeComponent S
  • Javascript 沙箱模式示例实现

    在 Stoyan Stefanov 的伟大著作 JavaScript Patterns 的第 101 页中 他解释了沙箱模式 我非常喜欢他的书 但我真的错过了一些现实生活中的例子 然后更好地理解他所谈论的内容 我正在寻找一个现实生活中的工作

随机推荐