TGViewer
Java Mentor Java Mentor @your_java_mentor · 288 subscribers
Post #195 259
public class Main {
/**
* Менеджер наблюдателей с возможностью подписки,
* отписки и оповещения
*/
public static class EventManager {
// Список наблюдателей
List<EventListener> listeners = new ArrayList<>();

/**
* Подписка наблюдателя
* @param listener наблюдатель
*/
public void subscribe(EventListener listener) {
listeners.add(listener);
}

/**
* Отписка наблюдателя
* @param listener наблюдатель
*/
public void unsubscribe(EventListener listener) {
listeners.remove(listener);
}

/**
* Оповещение наблюдателей
* @param data данные для передачи наблюдателям
*/
public void notify(String data) {
for (EventListener listener : listeners) {
listener.update(data);
}
}
}


/**
* Сервис, отвечающий за изменения состояний техники
*/
public static class TransportService {
public EventManager eventManager;

public TransportService(EventManager eventManager) {
this.eventManager = eventManager;
}

/**
* Метод для изменения координат
* @param coordinates новые координаты
*/
public void changeCoordinates(String coordinates) {
// Оповещение всех подписчиков о смене координат
eventManager.notify(coordinates);
}

}

/**
* Наш наблюдатель
*/
public interface EventListener {
/**
* Метод, который будет выполнен, когда наблюдателя оповестят об изменении
* @param data данные изменения
*/
void update(String data);
}

/**
* Класс, отвечающий за отправку WebSocket сообщений
*/
public static class WsNotificationListener implements EventListener {

/**
* Демо метод отправки сообщений. Будет вызван при изменении
* Состояний техники
* @param data данные изменения
*/
@Override
public void update(String data) {
System.out.println("Sending message to ws session: " + data);
}
}


public static void main(String[] args) {
// Отправитель ws сообщений
WsNotificationListener wsNotificationListener = new WsNotificationListener();

// Манагер наблюдателей
EventManager eventManager = new EventManager();
// Отправитель ws сообщений подписывается на изменения
eventManager.subscribe(wsNotificationListener);

// Сервис транспорта. Передаем ему манагера наблюдателей
TransportService service = new TransportService(eventManager);

Random random = new Random();
for (int i = 0; i < 100; i++) {
// В сервисе транспорта меняем координаты, по выводу в консоль убеждаемся что происходит отправка ws сообщений
service.changeCoordinates(String.format("New Coordinates [%s, %s]", random.nextInt(), random.nextInt()));
}
}
}
More from @your_java_mentor
  1. Sep 2, 2026photo post
  2. Sep 2, 2026video post
  3. Sep 1, 2026Post #394
  4. Sep 1, 2026Post #393
  5. Aug 28, 2026Как по вашему, что не так с этим кодом? ❌ В методе main в список добавляются магические ко…
  6. Aug 19, 2026UserService + UserServiceImpl — но Impl тут единственный. Как вы считаете: стоит ли заводи…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →