激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - JavaWeb監聽器Listener實例解析

JavaWeb監聽器Listener實例解析

2020-06-06 14:14qq_26525215 JAVA教程

這篇文章主要為大家詳細介紹了JavaWeb監聽器Listener實例,針對監聽器進行進行細致分析,感興趣的小伙伴們可以參考一下

首先來介紹一下什么是監聽器:

監聽器-就是一個實現待定接口的普通Java程序,此程序專門用于監聽另外一個類的方法調用。
這是使用觀察者模式的。

什么是觀察者模式:
定義對象間一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知自動更新。
示例:
GUI編程中的addXxxxListener都是觀察者模式。
比如為按鈕點擊添加監聽事件,為鍵盤添加監聽等等…

觀察者模式的三個重要類:

JavaWeb監聽器Listener實例解析

被監聽的事件源,也就是我們在使用的對象。
注冊的那個監聽器,是專門用來監聽當前使用的對象的。
事件對象Event也就是被監聽的那個對象!

我們先來看一個簡單版的,自己寫的監聽器。

簡單版:

有事件源,和監聽器,測試類.
Event等下一個完整版實現.
開發步驟:
第一步:實現一個需要被監聽的類Person.
第二步:實現一個監聽接口IPersonRunListener。
第三步:在Person類中,提供一個方法(或者多個,我在這里提供了2個方法)用于注冊IPersonRunListener類,即addBefore和addAfter
第四步:必須要在Person類中維護IPersonRunListener類的實例。
第五步:在調用person.run方法時,判斷IPersonRunListener是否為null,如果不為null則調用它的fighting方法。
第六步:在Demo類中,實例化Person,并注冊一個監聽。

Person:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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("跑完了,休息休息...");
 }
}

輸出:

JavaWeb監聽器Listener實例解析

完整版–添加事件源:

在這里相對前面的增加了一個Event-事件對象.算是完整版的了。

開發步驟:
第一步:在前頁的基礎上繼續添加一個PersonEvent類(注意我說是類不是接口),代表事件對像。
第二步:給PersonEvent對像,添加一個Person屬性,用以標識事件源對像。
第三步:修改PersonListener接口的fighting方法,讓它接收一個PersonEvent參數。
第四步:在Person類run方法中,如果判斷PersonListener屬性不為空,則在調用fighting方法,實例化PersonEvent并傳給fighting方法。
第五步:在main方法中,通過PersonEvent的getSource方法測試是否是同一個對像。

Person.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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();
 }
}

演示結果:

JavaWeb監聽器Listener實例解析

基本上的原理就是這些了,里面事件的輸出你換成你需要的動作就可以實現你想要的功能,添加一個監聽,就可以在run方法之前或者之后調用自己想要調用的方法,做自己想做的動作!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/qq_26525215/article/details/52252263

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 极品五月天 | 91久久久久久久一区二区 | 91网站免费在线观看 | 久久久久久久久久久高潮一区二区 | 国产一区二区亚洲 | 精品无码久久久久久国产 | 成人免费看毛片 | 黄色av网站在线观看 | 欧美一级黄色免费看 | 高清国产午夜精品久久久久久 | 国产一国产一级毛片视频 | gogo全球大胆高清人露出91 | 欧美顶级毛片在线播放小说 | 日本精品一区二区 | 国产精品久久久久久久久久免 | 香蕉视频18| 欧美xxxxx视频| 视频一区二区三区免费观看 | 欧美日韩夜夜 | 91 在线| 激情久久一区二区 | 羞羞视频一区 | 亚洲婷婷日日综合婷婷噜噜噜 | 久久久久久久久久久av | 斗破苍穹在线观看免费完整观看 | 一级毛片特黄 | 永久免费毛片 | 91精品国产综合久久久动漫日韩 | 黄色欧美精品 | aa级黄色片 | 1级黄色毛片 | 91精品国产综合久久久动漫日韩 | 日本s级毛片免费观看 | 亚洲伊人色欲综合网 | 免费观看黄色一级视频 | 免费国产在线观看 | 女人裸体让男人桶全过程 | 国产三级三级三级三级 | 九九看片 | 成年人在线视频免费 | 精品国产一区二区三区四 |