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