我正在设计一个API,它定义了两个不同型号之间的通用接口。通用接口是代表与之通信的外部系统的Peer
。 A Client
是Peer
,它尝试建立到特定地址的连接。而Server
是一个Peer
,它接受来自地址子网的连接。不同型号的可扩展接口
public interface Peer {
void send(Message m);
}
public interface Client extends Peer {
InetAddress getAddress();
}
public interface Server extends Peer {
String getSubnet();
}
使用此API的应用程序将与Peer
对象一起使用。正因为如此,他们的逻辑将不断要求类型检查来提取Peer
独有的信息来执行他们的工作。此外,如果有变成另一种类型的应用程序可能会中断。
Peer p = incomingMessage.getPeer();
if (p instanceof ClientPeer) {
//do client peer stuff
} else if (p instanceof ServerPeer) {
//do server peer stuff
} else {
//uh oh...
}
有没有更清晰的设计方法?一种不需要进行恒定的类型检查,并且不会因为新的类型Peer
而进一步扩展的缺陷?
也许ClientPeer和ServerPeer应该做他们自己的东西,或者如果他们总是做不同的事情,他们可能不需要子类型的对等体。 – dbugger