我对观察者模式的理解,之前一直很乱
我對(duì)觀察者模式的理解
觀察者模式
觀察者模式簡(jiǎn)單理解就是,有一方有新動(dòng)作,另一方也會(huì)跟著響應(yīng)作出改變,比如你點(diǎn)擊了一個(gè)關(guān)閉按鈕,跟關(guān)閉按鈕相關(guān)的窗體或者是頁(yè)面或者其他東西會(huì)有響應(yīng),比如窗體關(guān)閉了,頁(yè)面關(guān)閉了。觀察者模式就是建立這個(gè)按鈕跟這個(gè)窗體進(jìn)行聯(lián)系的方法。觀察者模式也可以稱(chēng)為發(fā)布--訂閱模式,在發(fā)布、訂閱模式里,發(fā)布方是被觀察者,訂約方是觀察者。有的資料也把被觀察者稱(chēng)作subject(主題)。以下是錯(cuò)誤理解!!!
以前我很容易混淆的概念就是,觀察者是干什么的,按照現(xiàn)實(shí)中的理解,他不是主動(dòng)去觀察別人嗎,比如小明是觀察者,小明去觀察正在學(xué)騎車(chē)的兒子,小明觀察到他兒子做的不對(duì),就通知他兒子該怎么做,然后小明兒子對(duì)小明的通知做出響應(yīng)。
放到發(fā)布–訂閱模式里就是:發(fā)布方去觀察訂閱方,這里的觀察只是為了要通知訂閱方,A,B,C向發(fā)布方訂閱,于是發(fā)布方觀察了A,B,C,發(fā)布方一旦有新的材料發(fā)布,發(fā)布方就通知他們,然后訂閱方們收到通知后就做出相關(guān)響應(yīng)。也就是說(shuō),發(fā)布方是觀察者,訂閱方是被觀察者。
正確思路剛好相反
發(fā)布方是被觀察者,訂閱方是觀察者,被觀察者要干嘛呢,觀察者又要干嘛呢,他們是如何聯(lián)系起來(lái)的呢,也就是說(shuō)如何“發(fā)送”通知呢,讓響應(yīng)發(fā)生呢?
被觀察者要干嘛:
1.添加觀察者,不是觀察者主動(dòng)去觀察被觀察者,是被觀察者想要被那位觀察者觀察,然后就讓誰(shuí)觀察,用發(fā)布訂閱的模式說(shuō),就是發(fā)布方想讓哪幾個(gè)訂閱方訂閱,就讓哪幾個(gè)訂閱方訂閱,被觀察者維護(hù)一個(gè)觀察者數(shù)組,數(shù)組里面裝著他的觀察者們,比如發(fā)布方維護(hù)一個(gè)訂閱方數(shù)組,【小甲,小乙,小丁】,就是這三人向發(fā)布方訂閱了,現(xiàn)在小丙也想訂閱,于是發(fā)布方調(diào)用 他的方法把小丙添加到數(shù)組里,發(fā)布方.add(小丙),現(xiàn)在發(fā)布方就有四個(gè)訂閱者了,就是【小甲,小乙,小丁,小丙】。
2.通知觀察者,把他維護(hù)的數(shù)組里的訂閱者一個(gè)個(gè)全都通知。
觀察者要干嘛:
觀察者一般情況下啥也不用干,他有一個(gè)響應(yīng)方法(雖然被稱(chēng)作觀察者,但他什么也不用觀察,這里的觀察頂多是指讓被觀察者把自己放到被觀察者的數(shù)組里,之前我還以為他必須時(shí)時(shí)刻刻觀察被觀察者呢。。),就等著被通知,被通知后執(zhí)行自己的響應(yīng)方法。
如何通知讓被觀察者與觀察者聯(lián)系起來(lái),如何通知以及響應(yīng):
其實(shí)就是被觀察者發(fā)生了某事后,去調(diào)用觀察者的方法,“調(diào)用”就把通知跟響應(yīng)兩個(gè)過(guò)程一起包辦了,我調(diào)用你就是我通知你,調(diào)用你的響應(yīng)方法就是你的響應(yīng)。比如
被觀察者.doSomething() {
xxx
xxx
觀察者.自己的方法();
}
總結(jié)
以上是生活随笔為你收集整理的我对观察者模式的理解,之前一直很乱的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Jmeter分布式压测方案
- 下一篇: c/c++中extern的作用