我理解的--java观察者模式
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
這個(gè)模式比較常用特別是在ui界面設(shè)計(jì)的過(guò)程中,android的監(jiān)聽(tīng)器就是觀察者模式。從表面上看一個(gè)物體發(fā)生變化,會(huì)引起另一個(gè)物體的反應(yīng)。首先是兩個(gè)類(lèi),當(dāng)一個(gè)類(lèi)發(fā)消息的時(shí)候,另一個(gè)類(lèi)會(huì)發(fā)生變化。其實(shí)是發(fā)生變化的類(lèi)調(diào)用了另一個(gè)類(lèi)的函數(shù),執(zhí)行的是另一個(gè)類(lèi)的函數(shù)。從層次上說(shuō),應(yīng)該是一個(gè)類(lèi)中包含了另一個(gè)類(lèi)的引用,發(fā)消息的類(lèi)是代理了另一個(gè)類(lèi)的功能。從語(yǔ)言的層次上,只是簡(jiǎn)單的類(lèi)的組合。
想抽象出來(lái)兩個(gè)類(lèi)按鈕和監(jiān)聽(tīng)按鈕的事件:
Button:能發(fā)出變化,變化的效果是調(diào)用的另一個(gè)類(lèi)。
interface?Button?{void?add(Lister?lister);void?notif();}Lister:真實(shí)處理變化的功能類(lèi)
public?interface?Lister?{void?update(String?name); }一個(gè)具體的按鈕:
class?Radio?implements?Button{Lister?lister;String?name;Radio(String?name){this.name?=?name;}@Overridepublic?void?add(Lister?lister)?{this.lister?=?lister;}@Overridepublic?void?notif()?{lister.update(name);}}單選按鈕點(diǎn)擊后把名字打印出來(lái):
public?class?ButtonLister?implements?Lister{@Overridepublic?void?update(String?name)?{System.out.println(name+?"按下去了");}}測(cè)試:
class?Test?{public?static?void?main(String[]?args)?{ButtonLister?lister?=?new?ButtonLister();Radio?radio?=?new?Radio("按鈕1");radio.add(lister);radio.notif();}}結(jié)果:
按鈕1按下去了
這個(gè)模式學(xué)了以后會(huì)很容易的理解ui界面的邏輯,他是在一個(gè)構(gòu)件上注冊(cè)一個(gè)監(jiān)聽(tīng)器,監(jiān)聽(tīng)器會(huì)根據(jù)不同的動(dòng)作作出不同的反應(yīng),雙擊、單擊等不同的操作。
轉(zhuǎn)載于:https://my.oschina.net/liuxinquan/blog/651887
總結(jié)
以上是生活随笔為你收集整理的我理解的--java观察者模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 贪心,POJ(2709)
- 下一篇: Oracle12c 在windonSer