Я разрабатываю 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
, это может сломаться.
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