java 观察者模式_Java技术干货分享:深入理解观察者模式原理与技术
觀察者模式(Observer Pattern)也叫做發(fā)布-訂閱(Publish/Subscribe)模式、模型-視圖(Model/View)模式。這個(gè)模式的一個(gè)最重要的作用就是解耦。也就是將被觀察者和觀察者進(jìn)行解耦,使得他們之間的依賴性更小,甚至做到毫無(wú)依賴。
觀察者模式的定義:該模式定義了對(duì)象之間的一對(duì)多依賴關(guān)系,Subject 對(duì)象是一,Observer 對(duì)象是多。當(dāng) Subject 對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于該 Subject 對(duì)象的 Observer 對(duì)象都會(huì)得到通知,并且自動(dòng)更新。仔細(xì)分析定義,要精確理解觀察者模式主要注意三點(diǎn):
經(jīng)過(guò)上面的分析,下面我用代碼簡(jiǎn)單實(shí)現(xiàn)上述邏輯。
1.首先需要定義一個(gè)觀察者對(duì)象,內(nèi)部含有data數(shù)據(jù)(getter、setter、構(gòu)造方法、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.其次定義主題對(duì)象,主題對(duì)象內(nèi)部提供觀察者綁定(register)的接口,并且可以更新(update)所綁定的觀察者對(duì)象。
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(); }控制臺(tái)打印
Observer{data='old'}Observer{data='old'}Observer{data='old'}update...Observer{data='new'}Observer{data='new'}Observer{data='new'}看到這里你也許會(huì)問(wèn):這就是觀察者模式?這么簡(jiǎn)單?你莫不是在逗我?
是的,這就是觀察者模式。我們從觀察者模式的定義出發(fā),抽取出關(guān)鍵的3點(diǎn)核心思想,對(duì)比代碼和三點(diǎn)思想,是不是完美一致?百度一下"觀察者模式",實(shí)現(xiàn)邏輯大都是復(fù)雜高深,其實(shí)就核心的思想來(lái)說(shuō),上面的示例足夠了,其它擴(kuò)展要以具體的業(yè)務(wù)需求來(lái)決定。比如:
end:如果你覺(jué)得本文對(duì)你有幫助的話,記得關(guān)注點(diǎn)贊轉(zhuǎn)發(fā),你的支持就是我更新動(dòng)力。
總結(jié)
以上是生活随笔為你收集整理的java 观察者模式_Java技术干货分享:深入理解观察者模式原理与技术的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 接口(多继承)
- 下一篇: 【2022最新Java面试宝典】—— N