java 观察者模式_Java技术干货分享:深入理解观察者模式原理与技术
生活随笔
收集整理的這篇文章主要介紹了
java 观察者模式_Java技术干货分享:深入理解观察者模式原理与技术
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
來源:編程技術精選定義了對象間的一對多依賴關系。 當 Subject 對象的狀態發生改變時,所有依賴于該 Subject 對象的 Observer 對象都會得到通知。 Observer 對象得到通知后,會自動更新,而不是被動。 Subject 角色是應該定義成類?比如 內置的 java.util.Observable;還是應該定義成接口,以規避Java不支持多重繼承的問題? 應該在什么時候訂閱主題(或者說注冊觀察者)?是實例化觀察者對象的同時?還是由客戶自主決定? 是否應該實現取消訂閱功能(或者說取消注冊)? 主題對象通知觀察者時,是否攜帶消息?換句話說,是“推”消息?還是“拉”消息? 是否支持多線程?
觀察者模式(Observer Pattern)也叫做發布-訂閱(Publish/Subscribe)模式、模型-視圖(Model/View)模式。這個模式的一個最重要的作用就是解耦。也就是將被觀察者和觀察者進行解耦,使得他們之間的依賴性更小,甚至做到毫無依賴。
觀察者模式的定義:該模式定義了對象之間的一對多依賴關系,Subject 對象是一,Observer 對象是多。當 Subject 對象的狀態發生改變時,所有依賴于該 Subject 對象的 Observer 對象都會得到通知,并且自動更新。仔細分析定義,要精確理解觀察者模式主要注意三點:
經過上面的分析,下面我用代碼簡單實現上述邏輯。
1.首先需要定義一個觀察者對象,內部含有data數據(getter、setter、構造方法、toString)。
public class Observer { private String data; public Observer(String data) { this.data = data; } public String getData() { return data; } public void setData(String data) { this.data = data; } @Override public String toString() { return "Observer{" + "data='" + data + ''' + '}'; }}2.其次定義主題對象,主題對象內部提供觀察者綁定(register)的接口,并且可以更新(update)所綁定的觀察者對象。
public class Subject { private List list = new ArrayList<>(); public void register(Observer observer){ list.add(observer); } public void update(){ list.forEach(observer -> { observer.setData("new"); System.out.println(observer.toString()); }); }}3.最后就是main方法。
public static void main(String[] args) { Subject subject = new Subject(); for (int i = 0; i < 3; i++) { Observer observer = new Observer("old"); subject.register(observer); System.out.println(observer.toString()); } System.out.println("update..."); subject.update(); }控制臺打印
Observer{data='old'}Observer{data='old'}Observer{data='old'}update...Observer{data='new'}Observer{data='new'}Observer{data='new'}看到這里你也許會問:這就是觀察者模式?這么簡單?你莫不是在逗我?
是的,這就是觀察者模式。我們從觀察者模式的定義出發,抽取出關鍵的3點核心思想,對比代碼和三點思想,是不是完美一致?百度一下"觀察者模式",實現邏輯大都是復雜高深,其實就核心的思想來說,上面的示例足夠了,其它擴展要以具體的業務需求來決定。比如:
end:如果你覺得本文對你有幫助的話,記得關注點贊轉發,你的支持就是我更新動力。
總結
以上是生活随笔為你收集整理的java 观察者模式_Java技术干货分享:深入理解观察者模式原理与技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 接口(多继承)
- 下一篇: 企业级业务架构设计理论与方法