问题标签 [command-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
469 浏览

c++ - 使用模板和命令模式从 C++ 调用 Objective-C 方法

我在stackoverflow上找不到它。我想出了这种方法。请建议是否有更好的方法来做到这一点。
代码:

C++ 类:

在Objective C中使用这个类:

0 投票
1 回答
1231 浏览

multithreading - 要使用多线程,命令模式是否比装饰器模式更有用?

看过之前的项目中如何使用命令模式后,我可以理解它在多线程(并行)编程中的用途,因为命令可以在不同的线程中执行。当需要在命令之间传递数据时,可以将数据存储在共享内存中,并且可以将指向该数据的指针(或句柄)传递给不同线程上的调用程序。

然而,装饰器模式似乎有所有事情都必须发生在单个线程上的限制,因为装饰器必须直接调用委托,这意味着它们必须在同一个线程上。

我对这个限制的理解正确吗?相反,是否可以在多个线程上运行装饰器?


我正在尝试实现的是一个处理数据流的管道。

  • 要实现为命令模式,它的execute方法需要两个参数:输入缓冲区和输出缓冲区。
  • 为了实现装饰器模式,它的getdata方法将调用它的委托来获取上一步的结果,应用它自己的处理,并将结果返回给调用者。

然而,在我以两种风格实现它之后,我发现每种风格都有我最初并不清楚的限制。

  • 使用命令模式时,我可以通过使用新缓冲区开始接受更多输入数据,而早期的缓冲区正在由运行在单独工作线程中的一些命令处理。我似乎无法用装饰器模式做到这一点。
  • 使用装饰器模式时,装饰器可以对其委托进行任意数量的调用,并能够将结果组合成一个块。它还可以拆分数据,方法是发出一个大请求,缓存它,然后返回它的一部分。当我使用带有一个输入缓冲区和一个输出缓冲区的命令模式时,不能有任何组合或拆分结果。
0 投票
8 回答
10032 浏览

oop - 为什么命令模式在面向对象设计中很方便?

我不明白为什么命令模式在面向对象设计中很方便。

而不是使用,例如Switch引用Lamp类的命令,我不能只创建一个Switchable抽象类并调用它的方法吗?

通过这种方式,无论如何我都将调用者和接收者解耦,并且我不必为每个接收者类创建一个 Command 对象。

0 投票
1 回答
5381 浏览

.net - 使用命令模式时的依赖注入

我第一次使用命令模式。我有点不确定我应该如何处理依赖关系。

在下面的代码中,我们调度了一个CreateProductCommand然后排队等待稍后执行。该命令封装了它需要执行的所有信息。

在这种情况下,我们可能需要访问某种类型的数据存储来创建产品。我的问题是,如何将这个依赖注入到命令中以便它可以执行?

非常感谢

0 投票
2 回答
1508 浏览

design-patterns - 观察者和命令设计模式,为什么菜单常用命令模式?

一切都在问题中,为什么菜单通常使用命令设计模式而不是观察者模式来实现?

0 投票
2 回答
272 浏览

asp.net-mvc-2 - 如何使用 DefaultModelBinder 绑定模型属性 - ASP.NET MVC2

我有以下情况。

  1. 我的 Edit/Employee 视图填充了来自 Entity Framework 实体 (Employee) 的模型
  2. 我从 Edit/Employee 发布到 Save/Employee 控制器操作。Save/Employee 操作需要另一种类型 (EmployeeSave),它具有 Employee 作为属性

这是编辑/员工方法

这是保存/员工方法

这是 EmployeeSave 类

MVC DefaultModelBinder 能够解析 Employee 和 EmployeeSave 类。

0 投票
3 回答
101 浏览

c# - 如何区分命令模式中逻辑上命名相同的包裹层?

我有这个界面...

在实现中,我只想验证两个 id,如果有效,则返回另一个接口的结果......

我想在同一个业务域程序集中定义接口,但我很难决定如何区分两个(或更多)层。从逻辑上讲,我认为它们即使名称不同也相似,因此我不能将它们放在同一个命名空间下。我是否通过命名空间分开?“验证”命名空间和“其他”命名空间?或者我是否将已经罗嗦的名字扩展成有点可笑的东西,比如......

随着我保持功能小且用途单一,我看到这种情况越来越多。

0 投票
1 回答
4710 浏览

c# - 序列化对函数的调用

我需要在我的应用程序中实现任务的概念。在我的项目中,任务是必须执行的操作,并由名称标识:每个任务还​​具有输入参数(类型和值)并产生一个或多个输出。

必须实现Task类,如何表达“有某种结果的操作”的概念?我可以将操作的名称存储在字符串属性中,但是如何表示该操作返回的类型呢?同样,我怎样才能实现一个输入参数列表的操作,当这些参数也可能是不同的类型时?

目标是序列化 Task 对象并将其发送到另一个节点。接收端分析接收到的Task对象,读取操作的名称并执行相应的函数。

例如,假设节点 A 和节点 B “具有”以下方法...

节点A的服务:

节点B的服务:

如果节点 C 需要计算一个矩形的面积,它知道它必须联系节点 A,并通过指定操作 (double areaOfRectangle ) 和输入 (double width和 double height ) 向节点 A 发送消息。同样,如果节点C需要计算圆的面积,它必须向节点B发送消息,指定操作和半径的长度。为了发送输入,因为它们可能是不同的类型(甚至是新的用户定义类型),我可以使用一个对象数组......

有些任务可能依赖于其他任务,即输入参数可能至少有另一个任务的一个输出,所以我还需要实现一个任务的输出和另一个任务的输入之间的链接。

我应该如何继续定义类?

0 投票
3 回答
327 浏览

java - issues with implementing command pattern in Java

I was trying to do a simple implementation of the command patter in java. However, I am getting the following error:

Code:

0 投票
1 回答
452 浏览

design-patterns - 当客户端可以直接从接收方实例调用方法时,为什么要使用命令模式?

最近我遇到了Command Pattern。在这个模式中,Client 负责创建 Reciever、ConcreteCommand 和 Invoker 的实例。在某个时间点(假设在按钮单击中)调用 Invoker 的 Invoke 方法。现在 Invoke 方法负责在 Reciever 中执行特定操作。但是,当客户端可以使用 Reciever 直接调用特定操作时,为什么我需要调用程序(否则命令模式)?