ClientThread
, т.е. на каждое подключение\клиента выделяется отдельным Тред, обрабатывающий сообщения клиента.WorkerThread
, он обслуживает сообщения от сервера. Для того, чтобы сообщения от сервера мог получать и обрабатывать любой компонент клиентской системы, использован Observer. Он позволяет внутренним компонентам системы "подписаться" на получение сообщений из сервера. WorkerThread
получает от сервера сообщение, он адресует его Observer. Observer доставляет уведомления уже всем своим подписчикам. Таким образом мы достигаем слабой связанностью между компонентом WorkerThread и компонентами, реализующими бизнес-логику по обработке сообщений из сервера.public class User {
private Long id;
private final String email;
public User(String email) {
this(null, email);
}
public User(Long id, String email) {
this.id = id;
this.email = email;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return email.equals(user.email);
}
@Override
public int hashCode() {
return email.hashCode();
}
}