Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
Design patterns 命令模式用例?_Design Patterns_Command Pattern - Fatal编程技术网

Design patterns 命令模式用例?

Design patterns 命令模式用例?,design-patterns,command-pattern,Design Patterns,Command Pattern,命令模式可能有用的一些示例用例是什么?我一直在读关于它的书,我对如何实现它有一个很好的想法。但当涉及到何时使用它时,这是一个很大的模糊 它解决的问题之一是解耦类的API。但这究竟意味着什么呢?直接调用对象的方法有什么缺点 它还解决了哪些其他问题,以及它们如何从中受益?命令模式可以帮助您提高可扩展性,因为您可以在不更改现有代码的情况下添加新的用例 它还允许您链接命令,并以顺序或并行模式执行(取决于语言功能)和创建宏 您可以在此页面中看到更多示例:命令模式可以在扩展性方面帮助您,因为您可以在不更改现

命令模式可能有用的一些示例用例是什么?我一直在读关于它的书,我对如何实现它有一个很好的想法。但当涉及到何时使用它时,这是一个很大的模糊

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


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

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

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


您可以在此页面中看到更多示例:

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

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


您可以在此页面中看到更多示例:

当您需要将操作视为对象时,命令模式非常有用,这样您就可以:

  • 添加不带开关盒构造的新动作类型(读:plugin)
  • 存储以后要执行的操作(例如,活动对象)
  • 关联到操作补充信息(例如,如何撤消操作)
下面是实际代码中命令模式的一个简单示例

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


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

当您需要将动作视为对象时,命令模式非常有用,以便您可以:

  • 添加不带开关盒构造的新动作类型(读:plugin)
  • 存储以后要执行的操作(例如,活动对象)
  • 关联到操作补充信息(例如,如何撤消操作)
下面是实际代码中命令模式的一个简单示例

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


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

Wikipedia对该主题有全面的介绍-。如果必须更改对象的方法,并且在整个软件项目中直接调用这些方法,那么无论在何处进行这些直接调用,都必须相应地更新项目。这是一个维护缺点。解耦可以防止这种类型的维护开销。@wiki是我最先访问的地方之一,但除了介绍之外,大多数内容(实现、术语等)都没有多大帮助。关于维修方面的缺点,我不太明白。你能给出一个具体的例子吗?可能是@jaco0646的副本它看起来确实有点误导,但我想用它作为一个例子。此外,我还希望有人能对此进行扩展。我意识到还有一些我可能错过了。维基百科对这个话题有全面的报道-。如果必须更改对象的方法,并且在整个软件项目中直接调用这些方法,那么无论在何处进行这些直接调用,都必须相应地更新项目。这是一个维护缺点。解耦可以防止这种类型的维护开销。@wiki是我最先访问的地方之一,但除了介绍之外,大多数内容(实现、术语等)都没有多大帮助。关于维修方面的缺点,我不太明白。你能给出一个具体的例子吗?可能是@jaco0646的副本它看起来确实有点误导,但我想用它作为一个例子。此外,我还希望有人能对此进行扩展。我意识到还有一些我可能错过了。