Observer設計模式

觀察者設計模式(訂閱/發(fā)布模式)是非常常見也是很有意思的一種設計模式,可以理解為是一種回調(diào)。

Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
定義了一種一對多的依賴關系,當一個對象(被觀察者Observable)的狀態(tài)發(fā)生改變后,多個依賴對象(觀察者Observer)被通知并自動發(fā)生變化。

觀察者模式的類圖:


Observer

觀察者模式的關鍵是被觀察者中具有一個屬性,一般為List<Observer>,保存著當前的觀察者,而每當被觀察者的屬性發(fā)生變化時,便會去通知觀察者(同步或異步,調(diào)用觀察者的update接口),所有觀察者只要繼承自Observer接口即可。

令人欣喜的是,如同迭代器設計模式一樣,觀察者模式實際也已經(jīng)被繼承在了JDK中。jdk中的java.util.Observer和java.util.Observable類中,我們在實現(xiàn)自己的觀察者模式時,只要去繼承相應的類即可。

以下的例子摘自wiki:
監(jiān)控控制臺用戶的輸入,當有輸入時觀察者進行相應,

import java.util.Observable;
import java.util.Scanner;

class EventSource extends Observable implements Runnable {
    public void run() {
        while (true) {
            String response = new Scanner(System.in).next();
            setChanged();
            notifyObservers(response);
        }
    }
}
import java.util.Observable;
import java.util.Observer;

public class MyApp {
    public static void main(String[] args) {
        System.out.println("Enter Text: ");
        EventSource eventSource = new EventSource();

        eventSource.addObserver(new Observer() {
            public void update(Observable obj, Object arg) {
                System.out.println("Received response: " + arg);
            }
        });

        new Thread(eventSource).start();
    }
}
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容