Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 状态设计模式实现_Java_Design Patterns_State Pattern - Fatal编程技术网

Java 状态设计模式实现

Java 状态设计模式实现,java,design-patterns,state-pattern,Java,Design Patterns,State Pattern,我正在尝试将状态设计模式应用到我正在构建的即时通讯程序中。该程序构建在现有即时通讯器API的基础上。我本质上是创建一个包装器类来简化发送消息的过程。(当某些事件发生时,几个自动脚本将使用包装器类来触发消息。) 以下是我到目前为止的情况: 一个Messenger类,将用作客户端接口并保存对当前状态的引用 一个AbstractMessengerState类,所有具体状态都将从该类继承 几个具体的State类表示各种状态(例如SessionStarted、LoggedIn、LoggedOut等)

我正在尝试将状态设计模式应用到我正在构建的即时通讯程序中。该程序构建在现有即时通讯器API的基础上。我本质上是创建一个包装器类来简化发送消息的过程。(当某些事件发生时,几个自动脚本将使用包装器类来触发消息。)

以下是我到目前为止的情况:

  • 一个
    Messenger
    类,将用作客户端接口并保存对当前状态的引用
  • 一个
    AbstractMessengerState
    类,所有具体状态都将从该类继承
  • 几个具体的
    State
    类表示各种状态(例如SessionStarted、LoggedIn、LoggedOut等)
我遇到的问题是在哪里存储状态数据。也就是说,哪个类应该存储执行messenger程序的业务逻辑所需的字段。例如,我有一个映射数据结构,它将用户ID(字符串)映射到底层API使用的对象。我有一个会话对象,用于访问各种Messeng组件以及登录和退出messenger服务器。这些对象需要在所有子类之间共享

如果我将此数据存储在基类中,那么每次实例化新状态时都会复制数据。有没有办法确保子类可以访问基类中的数据,而不必重复字段


更新


好的,在阅读了一篇文章之后,我将尝试将所有内容存储在Context(Messenger)类中,并看看这是如何进行的

你真的认为在这里应用状态模式会好吗?试着制作状态图,看看有多少状态以及它们的转换。嗨,阿图尔,谢谢你的评论。事实证明,在这种情况下,状态模式不是更好的解决方案。它产生了更多的代码,增加了复杂性。我首先尝试使用状态模式的唯一原因是为了简化事情。我的即席解决方案虽然远不完美,但相对来说更易于使用和理解。