我的班级是" Command"和#34; Dispatcher"模式?

时间:2014-05-08 19:38:20

标签: java android design-patterns

我的Android应用程序关注通过蓝牙或USB连接与其他硬件设备进行通信。要与该硬件设备通信,它使用命令响应协议。每种命令类型都有自己的预期响应长度,超时值,返回的响应必须完成的事情,以及每种命令所特有的其他参数。

我决定将每种类型的命令的所有内容封装到一个Command对象中,该对象由每种Command子类化,以创建具体的实现。这些对象具有调用方法以提供初始命令(字节序列),使用返回的响应调用的方法,等等。对我而言,这是优雅的,因为关于外部硬件设备的特定命令的所有内容,从最初发送的内容到如何处理响应,如何处理错误等等都封装在一个类中。

这是"命令模式"?

的示例

其次,我有一个类,它关注在队列中保存这样的Command个对象并顺序执行它们(也就是说,通过蓝牙/ USB发送它们的命令字节,并调用{{1}上的方法处理响应,错误等等。是否有任何特定的模式名称,什么是最好的类名?也许CommandCommandExecutor

1 个答案:

答案 0 :(得分:1)

是的,这听起来像命令模式的标准实现。 例如描述了该模式。在{"四人帮"的书Design Patterns中。如果您手头没有硬拷贝,可以在线查找,例如在WikipediaBlackwasp

您的CommandExecutor / CommandDispatcher似乎是Invoker的模式术语。 Invoker如何使用命令是一个实现细节,FIFO队列只是一种方式。所以没有具体的名称。但如果符合您的需求,您可以使用另一种设计模式,例如:有或没有并行执行命令的调度程序(另请参阅Active Object)。

提示: 如果您查看模式说明,您将看到已将ReceiverCommand合并为一个类,因为您的命令知道要执行的业务逻辑(=发送字节,进程回应等)。因此,如果将此业务逻辑放入命令使用的特定Receiver类中,则可以改进设计。这样,命令模式只是一个使用接收器/业务逻辑的层。这样可以更好地测试业务逻辑,而无需使用命令,也可以使命令模式可交换。