日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

java监听机制_详解java的事件监听机制和观察者设计模式

發布時間:2023/12/10 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java监听机制_详解java的事件监听机制和观察者设计模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先說說監聽器:

監聽器就是一個實現特定接口的普通java程序,這個程序專門用于監聽另一個java對象的方法調用或屬性改變,當被監聽對象發生上述事件后,監聽器某個方法將立即被執 行。

java的事件監聽機制可概括為3點:

1,java的事件監聽機制涉及到事件源,事件監聽器,事件對象三個組件,監聽器一般是接口,用來約定調用方式

2,當事件源對象上發生操作時,它將會調用事件監聽器的一個方法,并在調用該方法時傳遞事件對象過去

3,事件監聽器?實現類?通常是由開發人員編寫,開發人員通過事件對象拿到事件源,從而對事件源上的操作進行處理

事件監聽機制在java圖形用戶界面那一塊用的最多,我們舉個awt例子:

package cn.lmj.demo;

import java.awt.Frame;

import java.awt.event.WindowEvent;

import java.awt.event.WindowListener;

public class Demo

{

public static void main(String[] args)

{

//事件源

Frame frame = new Frame();

frame.setSize(300,300);

frame.setVisible(true);

//綁定事件對象

frame.addWindowListener(new MyListener());

}

}

//監聽器

class MyListener extends WindowAdapter

{

//當點擊了關閉按鈕是觸發的函數,e是事件對象,通過事件對象可以獲得事件源

@Override

public void windowClosing(WindowEvent e)

{

Frame f = (Frame) e.getSource();

f.dispose();

}

}

到這里,大家應該對事件監聽機制有所理解。接下來我們就進入觀察者模式,大家只要明白了事件監聽機制,那么觀察者模式就明白了,我們可以這樣去理解觀察者模式:

觀察者模式:觀察者(Observer)相當于事件監器,被觀察者(Observable)相當于事件源和事件,執行事件源邏輯時通知observer觸發oberver的方法調用,同時可傳被觀察者

舉個簡單示例

package cn.lmj.observer;

public class Demo

{

public static void main(String[] args)

{

Person p = new Person();

p.registerListener(new PersonListener()

{

@Override

public void doRun(Even e)

{

System.out.println(e.getP() + " is running");

}

@Override

public void doEat(Even e)

{

System.out.println(e.getP() + " is eatting");

}

});

p.run();

p.eat();

}

}

// 事件源

class Person

{

private PersonListener listener;

public void run()

{

if (listener != null)

{

listener.doRun(new Even(this));

}

System.out.println("run........");

}

public void eat()

{

if (listener != null)

{

listener.doEat(new Even(this));

}

System.out.println("eat........");

}

// 注冊監聽器

public void registerListener(PersonListener listener)

{

this.listener = listener;

}

}

// 監聽器

interface PersonListener

{

public void doRun(Even e);

public void doEat(Even e);

}

// 事件對象

class Even

{

private Person p;

public Even()

{

super();

}

public Even(Person p)

{

super();

this.p = p;

}

public Person getP()

{

return p;

}

public void setP(Person p)

{

this.p = p;

}

}

到這里相信大家對Java的事件監聽機制和觀察者模式都很明白了,最后說一下事件監聽機制或者觀察者模式在javaee開發中的應用。這種設計模式體現在servlet的事件監聽器,

在Servlet規范中定義了多種類型的監聽器,它們用于監聽的事件源分別為 ServletContext, HttpSession 和 ServletRequest 這三個域對象,Servlet規范針對這三個對象上的操作,又把這多種類型的監聽器劃分為三種類型

1,監聽三個域對象創建和銷毀的事件監聽器

2,監聽域對象中屬性的增加和刪除的事件監聽器

3,監聽綁定到 HttpSession 域中的某個對象的狀態的事件監聽器。(查看API文檔)

最后寫一個servlet的監聽器監聽當前網站的在線用戶量,這個值不是很準確

package cn.lmj.web.listener.exapmle;

import javax.servlet.ServletContext;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

public class CountNumListener implements HttpSessionListener

{

//當session創建時調用該方法

public void sessionCreated(HttpSessionEvent se)

//將在線用戶數量的值保持到ServletContext中,已便所有用戶看到

ServletContext context = se.getSession().getServletContext();

//第一次獲取沒有

if(count==null)

{

count = 1;

context.setAttribute("count", count);

}

else

{

count++;

context.setAttribute("count", count);

}

}

//session銷毀的時候調用該方法,把存在ServletContext中的數量值減一

public void sessionDestroyed(HttpSessionEvent se)

{

ServletContext context = se.getSession().getServletContext();

Integer count = (Integer) context.getAttribute("count");

count--;

context.setAttribute("count", count);

}

}

總結

以上是生活随笔為你收集整理的java监听机制_详解java的事件监听机制和观察者设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。