Java設計模式 觀察者模式

2021-08-19 23:26:33 字數 3033 閱讀 7868

一,觀察者模式

觀察者模式又名發布-訂閱模式,定義了物件之間的一對多依賴,多個物件同時監聽乙個物件,當被監聽物件的狀態發生改變時,它的所有依賴者都會收到通知並自動更新,被監聽物件稱為主題suject,監聽物件稱為觀察者observer。專案中應用的mq就是觀察者模式的一種表現形式。

二,uml類圖

* subject : 主題類,提供註冊,移除,通知觀察者類的方法。

* concretesubject : 具體主題類,對觀察者進行管理並變更通知。

* observer : 觀察者的頂層類,提供update()方法接收被觀察者類的通知。

* concreteobserver : 具體觀察者類,用來接收被觀察者類返回的狀態進行業務處理。

三,jdk內建的觀察者模式

1,觀察者類,實現observer介面並重寫update()方法;

public class jdkobserver implements observer

@override

public void update(observable o, object arg)

}

2,被觀察者類,繼承observable類

public class jdkobserable extends observable 

public void adviced()

}

3,執行流程 --- jdk原始碼分析

* 被觀察者類狀態變更完成後,首先必須呼叫父類的setchanged()方法,改變是否通知狀態

protected synchronized void setchanged()
* changed狀態改為true後,呼叫notifyobservers()方法,通知觀察者類

public void notifyobservers(object arg) 

for (int i = arrlocal.length-1; i>=0; i--)

((observer)arrlocal[i]).update(this, arg);

}

* 可以看到,被觀察者類在通知觀察者類之前,會將changed狀態重新改為false

protected synchronized void clearchanged()
4,測試類

public class jdkobservertest 

}

* 首先建立乙個被觀察者類

* 其次依次建立觀察者類並傳遞被觀察者類引用,依次繫結為該被觀察者類的觀察者類

* 執行被觀察者的更新方法後,觀察者類同步變更

四,自定義觀察者模式 --- 通過動態**實現觀察者模式

1,事件vo

public class event 

public object getsource()

public void setsource(object source)

public object gettarget()

public void settarget(object target)

public method getmethod()

public void setmethod(method method)

@override

public string tostring() ';}}

2,事件列舉

public enum eventenum
3,事件繫結

public class eventlistener 

protected void trigger(enum eventtype)

event.getmethod().invoke(event.gettarget(), event);

} catch (exception e) }}

* map的value可以用list進行替換,實現事件下的多觀察者;

4,被觀察者類頂層介面

public inte***ce subjectinte***ce
* 通過動態**實現,確保強一致性;

5,被觀察者類

public class subject extends eventlistener implements subjectinte***ce

public void remove()

}

6,被觀察者類**物件及方法執行

public class jdkproxy 

});return subjectinte***ce ;}}

7,觀察者類

public class observer 

}

8,客戶端

* 該實現方式仿照js的事件繫結***("click", function(){});進行處理。

java設計模式 觀察者模式

本例以貓和老鼠來講解觀察者,首先定義觀察者為 老鼠和主人,被觀察者為貓,如下 public inte ce observer public class event public string getname public class mouse implements observer public ...

Java設計模式 觀察者模式

在物件之間定義一對多的依賴關係,這樣一來,當乙個物件改變狀態,依賴它的物件都會收到通知,並自動更新。比如有乙個天氣的資料來源,和需要獲取天氣資料的觀察者。天氣資料不定時更新。而觀察者也是隨時訂閱和取消訂閱天氣資料來源。在訂閱時,希望每次天氣資料更新時觀察者都可以獲取資訊。天氣資料來源作為被觀察的主題...

Java設計模式 觀察者模式

觀察者模式是乙個使用率非常高的的模式,它是一套訂閱 發布系統,這個模式最重要的作用就是將訂閱者和被訂閱者解耦。定義物件間一種對多種的依賴關係,使得每當乙個物件改變狀態,則所有依賴於它的物件都會得到通知。subject 抽象主題類,也就是被觀察者 observable 把所有觀察者物件儲存在乙個集合裡...