我正在考虑设计一个(GoF/behavioral)命令模式接口。我可能决定把这件事叫做ICommand。我在想,我应该有一个包含一组命令接口对象的队列。我想使用队列,为这个队列中的每个项调用接口方法Execute,如下所示.
DequeuedItem.Execute(); // invoke the command-pattern对于队列中的每一个项目,直到耗尽它。
与Execute相关联的具体实现可能类似于..。
// concrete implementation of execute
public void Execute()
{
mySerialPort.ReadExisting(); // read data from a serial port
}据我所知,当涉及到真正拥有该端口的人时,使用COM端口可能会很棘手。
此外,我不只是在具体实现中声明SerialPort还有其他原因。比如..。很多命令都需要使用同一个端口(但不是同时使用)。因此,我需要将串口传递给具体的实现ICommand。这就引出了我的问题..。
当我将一个开放的串口传递给另一个对象后,它还会继续工作吗?
即使它能起作用,我还需要意识到其他的影响吗?
发布于 2016-04-14 16:25:18
传递引用
是的,它仍然可以工作,因为您只是传递引用,因此它不会更改引用对象(也不会创建副本)。
的责任
有3种可能的情况:
只有一个命令使用串行端口。串口完全封装在命令中,并在命令开始时打开,最后关闭。
至少有两个命令使用串行端口,性能没有问题(您没有时间可确保)。每个命令都有一个串行端口的实例(指向同一个COM端口)。每个命令负责打开/关闭。由于命令是按顺序执行的(DequeuedItem),所以串行端口上没有冲突。
至少有两个命令使用串行端口,但是您不能为每个命令打开/关闭串行端口。串行端口必须实例化一个更高的级别,并分配给所有需要它的命令。命令不决定打开/关闭串行端口,它们假设接收到一个已经打开的端口,并且不应该更改它的状态。当需要串行端口的命令被添加到队列中时,可以打开串行端口。当队列完成执行最后一个要求串行端口的命令时,端口可能会关闭。
在这3种情况下,我认为没有不好的解决办法。每一种情况都是适当的(或不合适),取决于您的用法(稀疏、集中、准确、.)。你使用串口的方式对我来说很好。
https://softwareengineering.stackexchange.com/questions/315741
复制相似问题