首先來介紹一下什么是監聽器:
監聽器-就是一個實現待定接口的普通Java程序,此程序專門用于監聽另外一個類的方法調用。
這是使用觀察者模式的。
什么是觀察者模式:
定義對象間一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知自動更新。
示例:
GUI編程中的addXxxxListener都是觀察者模式。
比如為按鈕點擊添加監聽事件,為鍵盤添加監聽等等…
觀察者模式的三個重要類:

被監聽的事件源,也就是我們在使用的對象。
注冊的那個監聽器,是專門用來監聽當前使用的對象的。
事件對象Event也就是被監聽的那個對象!
我們先來看一個簡單版的,自己寫的監聽器。
簡單版:
有事件源,和監聽器,測試類.
Event等下一個完整版實現.
開發步驟:
第一步:實現一個需要被監聽的類Person.
第二步:實現一個監聽接口IPersonRunListener。
第三步:在Person類中,提供一個方法(或者多個,我在這里提供了2個方法)用于注冊IPersonRunListener類,即addBefore和addAfter
第四步:必須要在Person類中維護IPersonRunListener類的實例。
第五步:在調用person.run方法時,判斷IPersonRunListener是否為null,如果不為null則調用它的fighting方法。
第六步:在Demo類中,實例化Person,并注冊一個監聽。
Person:
package cn.hncu.designPattern1;public class Person { private String name; private IPersonRunListener listener1; private IPersonRunListener listener2; public Person(String name) { super(); this.name = name; } public void run(){ if(listener1!=null){ listener1.fighting(); } System.out.println(name+"正在跑..."); if(listener2!=null){ listener2.fighting(); } } public void addBefore(IPersonRunListener listener){ this.listener1=listener; } public void addAfter(IPersonRunListener listener){ this.listener2=listener; }}interface IPersonRunListener{ public void fighting();}Demo
package cn.hncu.designPattern1;public class Demo { public static void main(String[] args) { Person person = new Person("張三"); IPersonRunListener listener = new IPersonRunListener() { @Override public void fighting() { //這里可以做很多事,不是只能輸出哦 //不過由于還沒寫Event對象,所以拿不到是誰調用的 System.out.println("先做好準備工作..."); } }; person.addBefore(listener); A a = new A(); person.addAfter(a); person.run(); }}class A implements IPersonRunListener{ @Override public void fighting() { //這里可以做很多事,不是只能輸出哦 //不過由于還沒寫Event對象,所以拿不到是誰調用的 System.out.println("跑完了,休息休息..."); } }輸出:

完整版 主站蜘蛛池模板: 花垣县| 梧州市| 高安市| 卫辉市| 栖霞市| 河南省| 肃北| 黄大仙区| 县级市| 呈贡县| 沽源县| 海门市| 原平市| 双辽市| 东兴市| 合肥市| 定襄县| 青岛市| 阳曲县| 盐源县| 潞城市| 饶平县| 河间市| 湖南省| 论坛| 福建省| 贺州市| 平果县| 西峡县| 佳木斯市| 五家渠市| 平原县| 庄浪县| 花莲县| 会东县| 宁河县| 仪陇县| 吉木乃县| 杂多县| 龙井市| 探索|