JavaWeb監聽器Listener實例解析。本站提示廣大學習愛好者:(JavaWeb監聽器Listener實例解析)文章只能為提供參考,不一定能成為您想要的結果。以下是JavaWeb監聽器Listener實例解析正文
起首來引見一下甚麼是監聽器:
監聽器-就是一個完成待定接口的通俗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("跑完了,歇息歇息..."); } }
輸入:
完全版–添加事宜源:
在這裡絕對後面的增長了一個Event-事宜對象.算是完全版的了。
開辟步調:
第一步:在前頁的基本上持續添加一個PersonEvent類(留意我說是類不是接口),代表事宜對像。
第二步:給PersonEvent對像,添加一個Person屬性,用以標識事宜源對像。
第三步:修正PersonListener接口的fighting辦法,讓它吸收一個PersonEvent參數。
第四步:在Person類run辦法中,假如斷定PersonListener屬性不為空,則在挪用fighting辦法,實例化PersonEvent並傳給fighting辦法。
第五步:在main辦法中,經由過程PersonEvent的getSource辦法測試能否是統一個對像。
Person.java
package cn.hncu.designPattern2; public class Person { private String name; private IPersonRunListener listener; public Person(String name) { super(); this.name = name; } public void run(){ System.out.println(name+"開端跑了.."); if(listener!=null){ listener.fighting(new PersonEvent(this)); } } public void addPersonListener(IPersonRunListener listener){ this.listener=listener; } public String getName(){ return name; } @Override public String toString() { return "Person [name=" + name + ", listener=" + listener + "]"; } } interface IPersonRunListener { public void fighting(PersonEvent pe); } class PersonEvent{ Person p = null; public PersonEvent(Person p) { this.p = p; } public String getName(){ return p.getName(); } public Object getSource(){ return p; } } //我們還可以寫一個幫我們完成了接口的根本類 //外面寫我們通用的模板,假如我們繼續這個類,我們便可以不寫了。 //有功效紛歧樣的處所,我們就本身寫,籠罩這個類的辦法 class DefaultCatListener implements IPersonRunListener { @Override public void fighting(PersonEvent pe) { System.out.println("默許的舉措..."); } }
Demo.java
package cn.hncu.designPattern2; public class Demo { public static void main(String[] args) { Person p1 = new Person("張三"); Person p2 = new Person("Jack"); IPersonRunListener listener = new IPersonRunListener() { @Override public void fighting(PersonEvent pe) { System.out.println(pe.getSource()+"曾經跑完了..."); if(pe.getName().equals("張三")){ System.out.println(pe.getName()+"跑到了第一位..."); } } }; p1.addPersonListener(listener); p2.addPersonListener(listener); p1.run(); p2.run(); Person p3 = new Person("李四"); p3.addPersonListener(new DefaultCatListener()); p3.run(); } }
演示成果:
根本上的道理就是這些了,外面事宜的輸入你換成你須要的舉措便可以完成你想要的功效,添加一個監聽,便可以在run辦法之前或許以後挪用本身想要挪用的辦法,做本身想做的舉措!
以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。