監聽器和 利 用觀察者設計模式設計一個程式

來源:互聯網
上載者:User

標籤:java   監聽器   

一、監聽器概念
    1、事件來源:發生事件的對象。
    2、監聽器:是一個介面,監聽事件來源上要發生的動作
    3、事件:事件對象一般是作為監聽器方法的參數存在的,它封裝了發生事件的對象

二、Servlet中提供的監聽器(8個)
    八個監聽器分類:
    2.1監聽ServletContext、HttpSession、ServletRequest對象的建立和銷毀的監聽器。
        ServletContextListener:監聽ServletContext對象的建立和銷毀。
        
        HttpSessionListener:監聽HttpSession對象的建立和銷毀。
                    建立:第一次調用request.getSession()時。
                          銷毀:1、主動調用invalidate()方法
                                2、逾時
                                
        ServletRequestListener:監聽ServletRequest對象的建立和銷毀。
                    
    2.2監聽ServletContext、HttpSession、ServletRequest對象中域變化(新來的,替換的,刪除的)的監聽器。
        ServletContextAttributeListener:
        HttpSessionAttributeListener:
        ServletRequestAttributeListener:
    2.3感知型監聽器:誰實現了這些介面,誰就能感知自己被怎麼著了。這種監聽器不需要註冊。
        HttpSessionActivationListener:感知自己何時隨著HttpSession對象鈍化和活化
        HttpSessionBindingListener:感知自己何時被HttpSession對象綁了(綁在域中)和解除綁定了。
        
    
    編寫步驟:
        1、編寫一個類實現某個監聽器介面
        2、在web.xml中註冊監聽器
            <listener>
                <listener-class>cn.usst.listener.ServletContextDemoListener</listener-class>

            </listener>

三、觀察者設計模式設計一個程式

//事件來源public class Student implements Serializable{private String name;private StudentListener listener;public Student(String name){//注入:通過構造方法this.name = name;}public String getName() {return name;}public void eat(){if(listener!=null){listener.preEat(new StudentEvent(this));}System.out.println("開始吃");}public void study(){if(listener!=null){listener.preStudy(new StudentEvent(this));}System.out.println("開始學");}}

public class StudentEvent {private Object source;public StudentEvent(Object source){this.source = source;}public Object getSource() {//擷取事件來源return source;}}

public interface StudentListener {void preEat(StudentEvent e);//監聽吃void preStudy(StudentEvent e);//監聽學}

測試案例:

public static void main(String[] args) {Student s = new Student("葛付以");//註冊監聽器s.addStudentListener(new StudentListener() {public void preStudy(StudentEvent e) {Student ss = (Student) e.getSource();System.out.println(ss.getName()+"喝杯奶吧");}public void preEat(StudentEvent e) {Student ss = (Student) e.getSource();System.out.println(ss.getName()+"慢慢吃");}});s.eat();s.study();}



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.