我有一个Java客户端,希望通过串行通信的消息与设备通信.客户端应该能够使用干净的API,抽象出串行通信的丑陋细节.客户端可以通过该API发送许多类型的消息并获得响应.我正在寻找建议哪种方式最适合实现此API.
为简单起见,假设我们只有两种消息类型:HelloMessage
触发a HelloResponse
和InitMessage
触发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 ...
在我看来,这很难看.
您有什么推荐的吗?还有其他方法可以提供更清晰的结果吗?
参考欢迎!别人怎么解决这个问题?