我正在設計一個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