android觀察者模式

android設計模式學習筆記(何紅輝,關愛民)

1、觀察者模式

這裏寫圖片描述

1、Subject抽象主題

抽象主題,也就是被觀察者(Observable)的角色,抽象主題角色把所以觀察者對象保存到一個集合中,每個主題都可以有任意觀察者的數量,抽象主題提供一個接口,可以增加和刪除觀察者對象。

2、ConcreteSubject具體主題

具體主題,該角色將有關狀態存入具體觀察者對象,在具體主題的內部狀態發生改變時,給所有註冊過的觀察者發出通知,具體主題以又叫具體被觀察者。

3、Observer抽象觀察者

抽象觀察者,它定義一個更新的接口,使得在得到主題的更改通知時更新自己。

4、ConcreteObserver具體觀察者

該角色實現抽象觀察者角色定義的更新接口,以便在主題發生改變時更新自己的狀態。

這裏寫圖片描述

代碼如下:
1、觀察者

public interface Watcher {
    void update(String str);
}

2、觀察者具體實現

public class TestWatcher implements  Watcher {

    @Override
    public void update(String str) {
        System.out.println(str);
    }
}

3、被觀察者

/**
 * 被觀察者
 */

public interface Watched {
    void addWatcher(Watcher wacher);
    void removeWatcher(Watcher wacher);
    void notifyWatchers(String str);
}

4、具體被觀察者

package com.example.watcherdemo;

import java.util.ArrayList;
import java.util.List;

/**
 * 具體被觀察者
 */

public class TestWatched implements  Watched {
    private List<Watcher> list=new ArrayList<Watcher>();


    @Override
    public void addWatcher(Watcher wacher) {
        list.add(wacher);
    }

    @Override
    public void removeWatcher(Watcher wacher) {
        list.remove(wacher);

    }

    @Override
    public void notifyWatchers(String str) {
        for(Watcher watcher:list){
            watcher.update(str);
        }
    }
}

測試代碼

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //被觀察者
        Watched hitef = new TestWatched();
        //觀察者
        Watcher watcher1 = new TestWatcher();
        Watcher watcher2 = new TestWatcher();
        Watcher watcher3 = new TestWatcher();

        hitef.addWatcher(watcher1);
        hitef.addWatcher(watcher2);
        hitef.addWatcher(watcher3);
        //當被觀察者小偷偷東西的時候,通知觀察者,然後做出相應的事件處理。
        hitef.notifyWatchers("小偷偷東西");
    }
}

運行結果
這裏寫圖片描述

3、觀察者與Rxjava

從純java的觀點看,Rxjava Observable類來自GOF觀察者模式
它添加了三個缺少的功能:

  • 生產者在沒有更多數據可用時能夠發出信號通知:onComplete()
  • 生產者了生錯誤時了出信號通知:onError()事件
  • Rxjava Obsrvables能夠組合而不是嵌套,從而避免開發者陷入回調的地獄。
發佈了142 篇原創文章 · 獲贊 265 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章