如何在Java中设计类型安全的消息API?

 mobiledu2502924733 发布于 2023-02-11 15:43

我有一个Java客户端,希望通过串行通信的消息与设备通信.客户端应该能够使用干净的API,抽象出串行通信的丑陋细节.客户端可以通过该API发送许多类型的消息并获得响应.我正在寻找建议哪种方式最适合实现此API.

为简单起见,假设我们只有两种消息类型:HelloMessage触发a HelloResponseInitMessage触发a InitResponse(实际上还有更多)

设计API(即设备的Java抽象)我可以:

每种消息类型一种方法:

public class DeviceAPI {
  public HelloResponse sendHello(HelloMessage){...}
  public InitResponse sendInit(InitMessage){...}
  ... and many more message types ....

这很安全.(它也可能是同send()一种方法的多次重载,但大致相同).但它非常明确,而且不够灵活 - 我们无法在不修改API的情况下添加消息.

我也可以有一个send方法,它接受所有消息类型:

class HelloMessage implements Message
class HelloResponse implements Response   
...
public class DeviceAPI {
  public Response send(Message msg){
    if(msg instanceof HelloMessage){
       // do the sending, get the response
       return theHelloResponse
    } else if(msg instanceof ...

这简化了API(只有一种方法),并允许在以后添加其他消息类型而无需更改API.同时,它要求客户端检查响应类型并将其转换为正确的类型.

客户代码:

DeviceAPI api = new DeviceAPI();
HelloMessage msg = new HelloMessage();
Response rsp = api.send(msg);
if(rsp instanceOf HelloResponse){
    HelloResponse hrsp = (HelloResponse)rsp;
    ... do stuff ...

在我看来,这很难看.

您有什么推荐的吗?还有其他方法可以提供更清晰的结果吗?

参考欢迎!别人怎么解决这个问题?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有