プログラマ:私は最終的にどのような観測モードを知っています

著者:千絶対に

Eメール:[email protected]

公開番号:千絶対に

タイトル:デザインパターンの観測モード(ソースを明記してください再現)

こんにちは、参照するために、私は、死んだ私は絶対に千のパブリック数以上の新しい番号に移行することを、何千人もが私の背中、最近起こった非常に柔軟なものを更新したことがない、あなたは紳士何を教えてくださいあなたはそれが私に3000の海、少し悲しいを取った記事にコメントする紳士を教えていますが、記事の評価、だけでなく、値を見ることができます。

千の前には、工場のモデルを導入したことがない、あなたはそれをマスター何を教えてください見てする方法がわからない、この記事は千をご紹介しますモードオブザーバーパターン、ここではデザインパターンを設計する必要があり、千は絶対にそれは比較的簡単であると考えてい限り領主がオブザーバーパターンが何であるかを知らない、とオブザーバーモードを作成する方法ならば、私は慎重に記事を読んで何を教えて、あなたは(QAQ)を私にスプレーすることができます。

Observerパターン

定義

まず、我々は練習のコンテンツBaiduの百科事典を参照してください。

(ビューモード、ソース - - - モデル、モデル購読時に公開と呼ばれることにより、リスナーモードまたはスレーブモード)にオブザーバーパターンは、デザインパターンです。状態自体が変化したときに、このモードでは、ターゲット・オブジェクトは、すべての観察者がそれに依存するオブジェクト管理、および事前通知します。これは通常、各視聴者に提供メソッド呼び出しによって達成されます。このモデルは、多くの場合、イベント処理システムを実装するために使用されます。

一千絶対にこの定義を理解するには、次のとおりです。クラスは、それに依存するすべてのオブザーバークラスを管理し、それが変化したときにこれらの依存関係の状況は、そのクラスの通知を与えるためのイニシアチブをとるだろう。

あなたは上記の言葉を理解できない場合の理解または非常に良い理解は、および、それらの数千人はあなたに説明するために、人生の例を使用しませんでした。

エンドポイントと呼ばれるウェブサイトは、小説のウェブサイトでの専門表情がある場合には、我々はそれに小説を読むことができ、一日の終わりには、更新された記事のプロダクトマネージャー、我々は土地に、この小説の読者に購読購読中止お知らせしたいと思い以下知らせるより。

今回千は、オブザーバ・モードは、何が私にそれらを与えないということではないと思ったことはありません。

コード

観測されたとのインタフェースを定義します

public interface Observerable{
    public void addObserver(Observer o);
    public void removeObserver(Observer o);
    public void notifyObserver();
}
复制代码

オブザーバインタフェースの定義

public interface Observer{
    public void update(String message);
}
复制代码

クラスが実装するインタフェースの定義Observerable

public class Author implements Observerable {
    private List<Observer> list;
    private String name;
    private String bookName;
    public Author(String name,String bookName){
        this.list = new ArrayList<Observer>();
        this.name = name;
        this.bookName = bookName;
    }
    public void addObserver(Observer o) {
        list.add(o);
    }

    public void removeObserver(Observer o) {
        if(list.contains(o)){
            list.remove(o);
        }
    }

  public void notifyObserver() {
        for(Observer observer : list){
            observer.update(this.name + " 更新了 《" + this.bookName + "》 新的一章");
        }
    }
}
复制代码

オブザーバーインタフェースを実装する読者定義されたクラス

public class Reader implements Observer {
    private String name;
    public Reader(String name){
        this.name = name;
    }
    public void update(String message) {
        System.out.println(this.name + " : " +message);
    }
}
复制代码

テスト

public class TestObserver {
    public static void main(String []args){
        Author author = new Author("总管","陈平安讲道理");
        Reader reader1 = new Reader("reader1");
        Reader reader2 = new Reader("reader2");
        Reader reader3 = new Reader("reader3");
        Reader reader4 = new Reader("reader4");
        author.addObserver(reader1);
        author.addObserver(reader2);
        author.addObserver(reader3);
        author.addObserver(reader4);
        author.notifyObserver();
        System.out.println("reader1取消了订阅");
        author.removeObserver(reader1);
        author.notifyObserver();
    }
}
复制代码

ここに画像を挿入説明

エクスプローラの読者は、4つを受け取るために購読することができます更新陳Pingan最新章、そして読者の感触Explorerの更新を解除するにはあまりにも遅く、結果エクスプローラー、その後の更新は、読者が1を受信します。

上記の例は非常に簡単に理解することはありませんが、私は紳士知らせる、Observerパターンは、このような単純なモデルです。あなたは私にメッセージを読むことができない場合は、千の疑問があなたを助けなければなりません。

概要

どのようなマスターの教えてください見ていてくれてありがとう。

次号、イテレータパターン。

あなたが好きな千を持っている場合は、絶対にそれを転送して、コメントをたどることができます。

私たちは、公共の数字の千、千マイクロチャンネルサーチしなければならず、私と一緒に遊びに来懸念しなければなりません。

ここに画像を挿入説明

おすすめ

転載: juejin.im/post/5e6ee8e56fb9a07c944cae86