[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-patterny-chto-takoe-pattern-observer":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},1262,"chto-takoe-pattern-observer",40,"patterny","Паттерны","🧩","Что такое паттерн Observer?","Observer -- паттерн, определяющий зависимость \"один ко многим\" между объектами: при изменении состояния одного все зависимые уведомляются автоматически.\n\n> Аналогия из жизни: Observer -- как подписка на Telegram-канал. Автор публикует пост, и все подписчики получают уведомление. Подписчики не опрашивают канал -- уведомление приходит само.\n\n\u003Cdetails>\n\u003Csummary>Пример реализации\u003C\u002Fsummary>\n\n```java\ninterface EventListener\u003CT> {\n    void onEvent(T event);\n}\n\nclass EventBus\u003CT> {\n    private final List\u003CEventListener\u003CT>> listeners = new CopyOnWriteArrayList\u003C>();\n\n    void subscribe(EventListener\u003CT> listener) { listeners.add(listener); }\n    void unsubscribe(EventListener\u003CT> listener) { listeners.remove(listener); }\n\n    void publish(T event) {\n        listeners.forEach(listener -> listener.onEvent(event));\n    }\n}\n\n\u002F\u002F Использование\nEventBus\u003COrderCreatedEvent> bus = new EventBus\u003C>();\nbus.subscribe(event -> emailService.sendConfirmation(event));\nbus.subscribe(event -> analyticsService.track(event));\nbus.publish(new OrderCreatedEvent(orderId));\n```\n\n\u003C\u002Fdetails>\n\n### Важное\n\n- Observer -- основа event-driven архитектуры\n- Spring Events (`ApplicationEventPublisher`) -- Observer из коробки\n- `CopyOnWriteArrayList` -- потокобезопасный список подписчиков\n\n### Частые ошибки\n\n- Утечки памяти -- подписчик не отписывается; в Java нет weak listeners по умолчанию\n- Синхронный Observer для тяжёлых операций -- блокирует publisher; используйте `@Async` или очереди\n\n### Как используется в 2026\n\n- Spring `@EventListener` \u002F `@TransactionalEventListener` -- стандартная реализация\n- Kafka, RabbitMQ -- Observer на уровне распределённой системы\n\n> **На собеседовании:** интервьюер ждёт связь Observer с event-driven архитектурой и Spring Events. Частая ошибка -- не упомянуть проблему утечек памяти при забытой отписке подписчиков.","","junior",[15],"patterns",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":20,"featuredSnippetReady":23},"Что такое паттерн Singleton? — Gymterview","Singleton -- паттерн, гарантирующий, что у класса есть только один экземпляр, и предоставляющий глобальную точку доступа к нему.","Singleton -- паттерн, гарантирующий, что у класса есть только один экземпляр, и предоставляющий глобальную точку доступа",[15,13],true]