觀察者模式

前言

觀察者模式屬於行爲型模式,又被稱作發佈/訂閱模式。主要用來解耦,將觀察者和被觀察者解耦。

主要涉及四個角色:抽象觀察者、具體觀察者、抽象被觀察者、具體被觀察者。

代碼實現

(1)創建抽象觀察者:

/**
 * 抽象觀察者
 */
public interface Observer {

    void update(String message);
}

(2)創建具體觀察者:

/**
 * 具體觀察者
 */
public class Boy implements Observer {
    private String name;

    public Boy(String name) {
        this.name = name;
    }

    @Override
    public void update(String message) {
       System.out.println("我是======="+name+",======收到了消息==="+message);
    }
}
/**
 * 具體觀察者
 */
public class Girl implements Observer {
    private String name;

    public Girl(String name) {
        this.name = name;
    }

    @Override
    public void update(String message) {
        System.out.println("我是======="+name+",======收到了消息==="+message);
    }
}

(3)抽象被觀察者

/**
 * 抽象被觀察者
 */
public interface Observable {
    void add(Observer observer);//添加觀察者

    void remove(Observer observer);//移除觀察者

    void notifyData(String message);//通知觀察者
}

(4)具體被觀察者

public class Teacher implements Observable {

    List<Observer> observerList=new ArrayList<>();

    @Override
    public void add(Observer observer) {//添加觀察者
        observerList.add(observer);
    }

    @Override
    public void remove(Observer observer) {//移除觀察者
        observerList.remove(observer);
    }

    @Override
    public void notifyData(String message) {//通知觀察者
        if (observerList!=null&&observerList.size()>0){
            for (Observer observer:observerList){
                observer.update(message);
            }
        }
    }
}

(5)測試

public class TestMain {

    public static void main(String[] args) {
        Observable observable=new Teacher();

        Observer boy=new Boy("張三");
        Observer girl=new Girl("麗麗");

        observable.add(boy);
        observable.add(girl);

        observable.notifyData("開學了");
    }
}

輸出結果:

我是=======張三,======收到了消息===開學了
我是=======麗麗,======收到了消息===開學了

Android中的常見的觀察者模式

(1)button的setOnClickListener監聽事件

(2)ListView的Adapter的notifyDataSetChanged()方法

(3)BroadcastReceiver

(4)RxJava、RxBus、RxAndroid、EventBus等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章