[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-reactive-chto-takoe-pattern-observer-i-kak-on-lezhit-v-osnove-reaktivnogo-programmirovaniya":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":15,"progress":16,"seo":17},987,"chto-takoe-pattern-observer-i-kak-on-lezhit-v-osnove-reaktivnogo-programmirovaniya",31,"reactive","Reactive","⚡","Что такое паттерн Observer и как он лежит в основе реактивного программирования?","Паттерн Observer (Наблюдатель) — поведенческий шаблон проектирования, позволяющий объектам следить за изменениями в других объектах и автоматически реагировать на них.\n\nТакже известен как Publish\u002FSubscribe или Event Listener. Паттерн обеспечивает слабую связность (loose coupling) между компонентами, что делает его основой реактивного программирования, где система должна реагировать на изменения внешних источников данных.\n\n### Ключевые компоненты\n\n- Subject — источник данных или событий, управляет подписками наблюдателей\n- Observer — получает уведомления при изменении состояния Subject\n\nВ реактивной конфигурации Subject публикует изменения, а Observers подписываются на них, что подчёркивает модель потока данных (datastream model).\n\n\u003Cdetails>\u003Csummary>Пример кода паттерна Observer\u003C\u002Fsummary>\n\n```java\nimport java.util.ArrayList;\nimport java.util.List;\n\ninterface Observer {\n    void update();\n}\n\nclass Subject {\n    private List\u003CObserver> observers = new ArrayList\u003C>();\n    private int state;\n\n    public int getState() {\n        return state;\n    }\n\n    public void setState(int state) {\n        this.state = state;\n        notifyAllObservers();\n    }\n\n    public void attach(Observer observer) {\n        observers.add(observer);\n    }\n\n    public void notifyAllObservers() {\n        for (Observer observer : observers) {\n            observer.update();\n        }\n    }\n}\n\nclass ConcreteObserver implements Observer {\n    private String name;\n    private Subject subject;\n\n    public ConcreteObserver(String name, Subject subject) {\n        this.name = name;\n        this.subject = subject;\n    }\n\n    @Override\n    public void update() {\n        System.out.println(\"Observer \" + name + \" updated. New state: \" + subject.getState());\n    }\n}\n\npublic class Main {\n    public static void main(String[] args) {\n        Subject subject = new Subject();\n        ConcreteObserver observer1 = new ConcreteObserver(\"One\", subject);\n        ConcreteObserver observer2 = new ConcreteObserver(\"Two\", subject);\n\n        subject.attach(observer1);\n        subject.attach(observer2);\n\n        subject.setState(5);\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\nВ данном примере Subject ведет список подписавшихся Observers и уведомляет их при изменении его состояния.\n\n### Практическое применение\n\n- Обработка событий пользовательского интерфейса\n- Системы уведомлений\n- Отслеживание изменений состояния приложения\n\nВажно помнить, что чрезмерное использование паттерна может привести к усложнению кода и затруднить отладку.\n\n> **На собеседовании:** интервьюер ожидает связку: Observer — это фундамент реактивного программирования, расширенный поддержкой backpressure, операторов и управления потоками. Частая ошибка — не упомянуть, чем реактивный Observer отличается от классического GoF-паттерна (добавлены backpressure и терминальные сигналы onComplete\u002FonError).","","junior",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Что такое паттерн Observer и как он лежит в основе реактивно — Gymterview","Паттерн Observer (Наблюдатель) — поведенческий шаблон проектирования, позволяющий объектам следить за изменениями в других объектах и автоматически реагировать ","Паттерн Observer (Наблюдатель) — поведенческий шаблон проектирования, позволяющий объектам следить за изменениями в друг",[7,13],"Паттерн Observer (Наблюдатель) — поведенческий шаблон проектирования, позволяющий объектам следить за изменениями в других объектах и автоматически реагировать на них.",true]