gpt4 book ai didi

java - 我的类是 "Command"和 "Dispatcher"模式的示例吗?

转载 作者:行者123 更新时间:2023-12-01 13:00:29 25 4
gpt4 key购买 nike

我的 Android 应用程序涉及通过蓝牙或 USB 连接与另一个硬件设备进行通信。为了与该硬件设备通信,它使用命令响应协议(protocol)。每种命令类型都有其自己的预期响应长度、超时值、必须如何处理返回的响应以及每种命令特有的其他参数。

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

这是“命令模式”的示例吗?

其次,我有一个类,它负责将此类 Command 对象保存在队列中并按顺序执行它们(即,通过蓝牙/USB 发送它们的命令字节,并调用该对象上的方法) Command 来处理响应、错误等)。是否有任何特定的模式名称,以及最好的类名称是什么?也许CommandExecutorCommandDispatcher

最佳答案

是的,这听起来像是命令模式的标准实现。该模式被描述为例如在书中Design Patterns由“四人帮”组成。如果您手头没有硬拷贝,您可以在网上找到它,例如上WikipediaBlackwasp .

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

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

关于java - 我的类是 "Command"和 "Dispatcher"模式的示例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23551007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com