【问题标题】:Command pattern use case?命令模式用例?
【发布时间】:2017-01-08 02:56:47
【问题描述】:

可以使用命令模式的示例用例有哪些?我一直在阅读它,并且我对如何实现它有一个好主意。但是在知道何时使用它时,这是一个很大的模糊。

它解决的一个问题是解耦一个类的 API。但这究竟意味着什么?直接调用对象的方法有什么缺点?

它还解决了哪些其他问题,它们如何从中受益?

【问题讨论】:

  • 维基百科对该主题有全面的报道 - en.wikipedia.org/wiki/Command_pattern。如果您必须更改对象的方法,并且在整个软件项目中直接调用这些方法,那么无论在何处进行这些直接调用,都必须相应地更新项目。这是维护的缺点。解耦可防止此类维护开销。
  • @ThisClark wiki 是我最先去的地方之一,但除了介绍之外,大部分内容(实现、术语等)都不是很有帮助。至于维修劣势,我不太明白。能否举个具体的例子?
  • @jaco0646 这似乎有点误导,但我打算以此为例。此外,我希望有人可以扩展它。我意识到我可能错过了其他人。

标签: design-patterns command-pattern


【解决方案1】:

当您需要将动作视为对象时,命令模式很有用,因此您可以:

  • 添加新的操作类型而不使用 switch case 构造(阅读:插件)
  • 存储稍后要执行的操作(例如,活动对象)
  • 与操作补充信息相关联(例如,如何撤消操作)

下面是实际代码中命令模式的简单示例。

在实现协议时,您可以使用命令模式将字节流的解析与与消息关联的操作分离(请记住,在 OO 中您不管理消息,但消息会自行管理 :-)

当通道从线路接收到一些字节时,它会构造正确的命令对象(例如,使用原型或抽象工厂模式)并将其放入队列中以便稍后执行(可能在另一个线程中)。

【讨论】:

    【解决方案2】:

    命令模式可以在可扩展性方面为您提供帮助,因为您可以在不更改现有代码的情况下添加新的用例。

    它还允许您链接命令并以顺序或并行模式执行它(取决于语言能力)并创建

    您可以在此页面中查看更多示例:http://gameprogrammingpatterns.com/command.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 2012-08-22
      • 2010-12-02
      • 2012-05-31
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多