程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JavaWeb監聽器Listener實例解析

JavaWeb監聽器Listener實例解析

編輯:關於JAVA

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辦法之前或許以後挪用本身想要挪用的辦法,做本身想做的舉措!

以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved