[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-reactive-opishite-rol-observable-i-observer-v-reaktivnom-programmirovanii":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},988,"opishite-rol-observable-i-observer-v-reaktivnom-programmirovanii",31,"reactive","Reactive","⚡","Опишите роль Observable и Observer в реактивном программировании","Observable — источник (производитель) данных, Observer — потребитель данных. Их взаимодействие через подписку формирует основу реактивного потока.\n\n### Ключевые концепции\n\n| Компонент | Роль |\n|-----------|------|\n| Observable (Наблюдаемый) | Передаёт данные или сигналы любых типов |\n| Observer (Наблюдатель) | Получает уведомления при отправке данных |\n| Subscription (Подписка) | Связующее звено между Observable и Observer |\n| Operators (Операторы) | Преобразуют, фильтруют, комбинируют поток данных |\n\n### Пример: Java 9+ (Flow API)\n\n\u003Cdetails>\u003Csummary>Subscriber\u003C\u002Fsummary>\n\n```java\nimport java.util.concurrent.Flow;\n\npublic class SimpleSubscriber implements Flow.Subscriber\u003CString> {\n    private Flow.Subscription subscription;\n\n    @Override\n    public void onSubscribe(Flow.Subscription subscription) {\n        this.subscription = subscription;\n        subscription.request(1); \u002F\u002F Запрашиваем первый элемент\n    }\n\n    @Override\n    public void onNext(String item) {\n        System.out.println(\"Received: \" + item);\n        subscription.request(1); \u002F\u002F Запрашиваем следующий элемент\n    }\n\n    @Override\n    public void onError(Throwable throwable) {\n        System.err.println(\"Error: \" + throwable.getMessage());\n    }\n\n    @Override\n    public void onComplete() {\n        System.out.println(\"All items received\");\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>Publisher\u003C\u002Fsummary>\n\n```java\nimport java.util.concurrent.Flow;\nimport java.util.concurrent.SubmissionPublisher;\nimport java.util.concurrent.TimeUnit;\n\npublic class SimplePublisher {\n\n    public static void main(String[] args) throws InterruptedException {\n        SubmissionPublisher\u003CString> publisher = new SubmissionPublisher\u003C>();\n        SimpleSubscriber subscriber = new SimpleSubscriber();\n\n        publisher.subscribe(subscriber);\n\n        System.out.println(\"Publishing data items...\");\n        String[] items = {\"item1\", \"item2\", \"item3\"};\n        for (String item : items) {\n            publisher.submit(item);\n            TimeUnit.SECONDS.sleep(1);\n        }\n\n        publisher.close();\n        TimeUnit.SECONDS.sleep(3);\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Пример: Project Reactor\n\n```java\nimport reactor.core.publisher.Flux;\n\npublic class ReactorExample {\n\n    public static void main(String[] args) {\n        Flux\u003CString> flux = Flux.just(\"Hello\", \"World\", \"From\", \"Reactor\");\n\n        flux.subscribe(\n            item -> System.out.println(\"Received: \" + item),\n            error -> System.err.println(\"Error: \" + error),\n            () -> System.out.println(\"All items received\")\n        );\n    }\n}\n```\n\n> **На собеседовании:** покажите, что понимаете протокол взаимодействия: Publisher.subscribe -> onSubscribe -> request(n) -> onNext (до n раз) -> onComplete\u002FonError. Частая ошибка — забыть про request(n), без которого данные не будут отправлены.","","junior",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":19,"featuredSnippetReady":22},"Опишите роль Observable и Observer в реактивном программиров — Gymterview","Observable — источник (производитель) данных, Observer — потребитель данных. Их взаимодействие через подписку формирует основу реактивного потока.","Observable — источник (производитель) данных, Observer — потребитель данных. Их взаимодействие через подписку формирует ",[7,13],true]