一,觀察者模式
觀察者模式又名發布-訂閱模式,定義了物件之間的一對多依賴,多個物件同時監聽乙個物件,當被監聽物件的狀態發生改變時,它的所有依賴者都會收到通知並自動更新,被監聽物件稱為主題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 把所有觀察者物件儲存在乙個集合裡...