【问题标题】:Command Pattern - return a value命令模式 - 返回一个值
【发布时间】:2011-06-28 12:09:05
【问题描述】:

我正在使用命令模式通过 TCP/IP 套接字将命令从客户端传递到服务器。服务器将获取命令对象,对其进行反序列化,然后在命令对象上调用 execute()。但是,我需要通过套接字将一个值传回给调用者。命令模式是否允许这样做?如果没有,是否有解决方法?我看过维基百科上的电灯开关示例,这很棒,但没有返回值。 非常感谢任何建议。

【问题讨论】:

  • 您能解释一下为什么需要将值发送回调用者吗?也许更多的上下文会有所帮助。
  • 我是模式的忠实信徒。但是,它们只能用于它们的设计目的。到目前为止,我对命令模式价值的看法似乎与您所描述的不符。您能否详细说明您认为命令模式在您的实现中为您购买的东西以及您使用它的原因?
  • stackoverflow.com/questions/1154935/… 是一个类似的问题
  • 大家好。好吧,最终我希望通过套接字实现客户端和服务器之间的消息传递。当客户端想要调用服务器上的方法时,它会发送一个“NetworkRequest”实例。这将是一个枚举,指示要在另一侧调用的方法以及一些参数。在某些情况下,“NetworkReply”将被发送回客户端,并提供信息以供其采取行动。谢谢

标签: java command-pattern


【解决方案1】:

您不应该在发送到远程服务器的Command 上使用“execute()”方法,这在很多方面都很糟糕,尤其是在 Java 中。 Command 应该代表收件人应该采取的行动。在这种情况下是调用某个对象的方法。

Command 模式表示已采取或将要采取的行动,而不是这些行动的实施。多考虑一组要执行的指令。

您所描述的基本上是一种过度设计的 RPC 调用机制。不要重新发明这个轮子。看看现有的 RPC 机制,Java 世界中有很多可供选择的。然后你需要决定 RPC 是同步的还是异步的。

基于REST 的 API 很受欢迎,并且作为 API 的持续时间比任何本地语言特定机制(如 RMI)都要长。

【讨论】:

  • 好点。您认为 RMI 是否适合这种情况,而不是我的问题上下文中的套接字? RMI 会给我可以由客户端直接调用的存根,不是吗?这似乎是一种更好的方法。再次感谢指点。
  • 我刚刚发现 RMI 在 android 上是不行的。还有其他建议吗?再次感谢
  • 现在很流行一个简单的基于 REST 的 API。我不是指 RPC over HTTP,我指的是真正的 REST。 -> vertigrated.com/blog/2009/10/this-isnt-rest-this-is-rpc
  • 是的,在 Android 上反序列化 Java 对象也不行,Android 不使用 Java 虚拟机,它在任何方面都与字节码不兼容。
  • Android 上的序列化是否与“普通”Java 兼容独立于 VM - 它仅依赖于 ObjectOutputStream 和 ObjectInputStream 实现(实际上是规范)。我认为没有理由假设格式会有所不同,只要您的类在两个平台上都存在并且仅使用两个平台上都存在的(可序列化)类。序列化不使用 Java 字节码。
猜你喜欢
  • 1970-01-01
  • 2013-01-22
  • 2010-11-12
  • 2016-12-16
  • 1970-01-01
  • 2013-03-27
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多