デザインパターン16のオブザーバーモード

バックグラウンド

オブザーバーパターンを知っていて、それを使用したことがある必要があります。オブザーバーパターンという言葉を聞いたことがない場合は、パブリッシュ/サブスクライブモデルを知っている必要があります。Kafkaなどのメッセージミドルウェアを使用する場合、データの生成と消費にパブリッシュ/サブスクライブモデルを使用します。パブリッシュ/サブスクライブモデルはオブザーバーモデルとして理解できます。

次のコード:

カフカはメッセージを発表しました:

 ListenableFuture future = kafkaTemplate.send(topic, jsonString);

消費者サブスクリプションニュース:

@KafkaListener(topics = "${spring.kafka.topic}")
 public void listen(ConsumerRecord<?, ?> record) {
        log.info("topic={}, offset={}, message={}", record.topic(), record.offset(), record.value());
 }

上記は、Kafkaのpublish-subscribeの使用方法です。

パブリッシュ/サブスクライブメッセージミドルウェアに加えて、zookeeperの監視メカニズムもオブザーバーモードを使用します。あなたはそれについて考えることができます、あなたはどのような状況でオブザーバーモードを使いますか?

オブザーバーパターンとは

実生活では、多くのオブジェクトが独立して存在するわけではなく、1つのオブジェクトを変更すると、他のオブジェクトも変更されることがよくあります。たとえば、仕事を休んでいるときは、仕事を辞めて家に帰り、道路で赤信号に遭遇したときに停止し、株式市場が良くなったときに投資を増やします。

上記の関係を開発で説明したい場合は、オブザーバーモードを使用できます。

「「

オブジェクト間の1対多の依存関係を定義して、1つのオブジェクトの状態が変化したときに、そのすべての依存関係が自動的に通知および更新されるようにします。それに依存するオブジェクトは、自動的に通知および更新されます。)

オブザーバーパターンは、主に4つの要素で構成されています。

「「
  • 抽象サブジェクト(サブジェクト)ロール:抽象ターゲットクラスとも呼ばれ、オブザーバーオブジェクトを保存するための集約クラス、オブザーバーオブジェクトを追加および削除するためのメソッド、およびすべてのオブザーバーに通知するための抽象メソッドを提供します。

  • 具象サブジェクトの役割:具象ターゲットクラスとも呼ばれ、抽象ターゲットに通知メソッドを実装します。具象サブジェクトの内部状態が変化すると、登録されているすべてのオブザーバーオブジェクトに通知します。

  • 抽象オブザーバー(オブザーバー)の役割:これは、特定のサブジェクトの変更の通知を受信したときに呼び出される、それ自体を更新するための抽象メソッドを含む抽象クラスまたはインターフェースです。

  • 具象オブザーバー(具象オブザーバー)の役割:ターゲットの変更が通知されたときに自身の状態を更新するために、抽象オブザーバーで定義された抽象メソッドを実装します。

構造図は次のとおりです。

オブザーバーモード

コード

件名

観察者

ConcreteSubject

ConcreteObserver

テストコードは次のとおりです。

@Test
public void test() {
    Subject subject=new ConcreteSubject();
    Observer obs1=new ConcreteObserver1();
    Observer obs2=new ConcreteObserver2();
    subject.add(obs1);
    subject.add(obs2);
    subject.notifyObserver();
}

テスト結果は次のとおりです。

具体目标发生改变...
--------------
具体观察者1作出反应!
具体观察者2作出反应!

オブザーバーモデルについての考え

どのような状況でオブザーバーモードを使用できますか?

オブジェクト間に1対多の関係がある場合、1つのオブジェクトの状態の変化が他のオブジェクトに影響を与える場合は、オブザーバーモードを使用できます。製品に品質上の問題がある場合の例を挙げましょう。すでに製品を購入した注文を凍結する必要があります。そうすれば、オブザーバーモードを使用できます。製品の凍結注文を実行します。製品が凍結されると、製品を含むすべての注文が通知され、凍結されます。

別のシーンでもう一度考えてみましょう。注文後、ユーザーはポイントを送信し、ロジスティクス情報、SMS通知、WeChat通知を生成する必要があります。オブザーバーモードを使用できますか?この問題については、オブザーバーモードを使用するメリットについて説明する前に記事も書きました。興味のある方はぜひご覧ください。

「「

実際の戦闘の開発-モジュールのデカップリングを実現するためにSpringのイベント監視メカニズムを使用しました

ご存知のように、観察者と観察者の間の結合は非常に低いです。このように、オブザーバーとオブザーバーは簡単に拡張できます。

オブザーバーモードは、トリガーチェーンを簡単に実装できます。トリガーチェーンとは何ですか?たとえば、目覚まし時計が朝起きたら、起きて、お腹が空いて、朝食に行きます。もうすぐ仕事時間になります。車で仕事に行き、仕事時間が終わったら電源を入れます。あなたのコンピュータと釣りを始めてください。この一連のトリガーメカニズムは、トリガーチェーンを形成します。

オブザーバーモードでは、開発効率と運用効率の問題を考慮する必要があります.1つのオブザーバー、複数のオブザーバー、開発とデバッグはより複雑になり、Javaでのメッセージの通知はデフォルトで順次実行され、1つのオブザーバーがスタックします。全体的な実行効率。この場合、非同期アプローチが一般的に考慮されます。

過去におすすめ

QRコードをスキャンして、よりエキサイティングになります。または、WeChatLvshen_9を検索すると、返信してバックグラウンドで情報を取得できます

  1. 回复"java" 获取java电子书;

  2. 回复"python"获取python电子书;

  3. 回复"算法"获取算法电子书;

  4. 回复"大数据"获取大数据电子书;

  5. 回复"spring"获取SpringBoot的学习视频。

  6. 回复"面试"获取一线大厂面试资料

  7. 回复"进阶之路"获取Java进阶之路的思维导图

  8. 回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)

  9. 回复"总结"获取Java后端面试经验总结PDF版

  10. 回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)

  11. 回复"并发导图"获取Java并发编程思维导图(xmind终极版)

もう1つ:[マイベネフィット]をクリックして、さらに驚きを持ってください。

 

おすすめ

転載: blog.csdn.net/wujialv/article/details/109524329