Java監聽模式

說明

  生活中,監聽無處不在。好比說,手機播放音樂功能,也是一種監聽:你不點擊播放按鈕,手機就不放歌,當你點擊時,手機就播放音樂。即觸發某種行爲,便執行相應的動做。git

組成

  1. Java監聽模式右三個部分組成:事件源、事件對象、事件監聽器
  2. 當事件源觸發某種行爲,會自動執行事件監聽器裏面相應的方法
  3. 事件監聽器方法參數是事件對象,事件對象包含事件源的引用,在方法中能夠獲取事件源的引用

PS:好吧,說的有點暈,由於我也是剛學的啦,看的暈的同窗直接看代碼就行了。github

實現

  • 事件源:Student擁有read()方法,
package com.petro.listener;
/**
 * @ClassName: Student
 * @description: 監聽模式的事件源
 * @author Petro Chen
 * @date: 2017年9月12日下午11:32:03
 */
public class Student {
    
    // read方法事件監聽器引用
    private Listener listener;
    
    /**
     * @description: 註冊read方法的事件監聽器
     * @param listener 事件監聽器引用
     * @return void
     * @throws
     */
    public void setReadListener(Listener listener) {
        this.listener = listener;
    }
    
    /**
     * @description: 學生的read方法
     * @return void
     * @throws
     */
    public void read() {
        if (listener != null) {
            Event event = new Event();
            event.setStudent(this);
            // 學生正在讀書...
            listener.isReading(event);
        }
    }
}
  • 事件監聽器:用來監聽Student.read()方法
package com.petro.listener;

/**
 * @ClassName: Listener
 * @description: 事件監聽器
 * @author Petro Chen
 * @date: 2017年9月12日下午11:33:56
 */
public interface Listener {
    /**
     * @description: 學生讀書觸發的事件
     * @param event 事件對象引用,經過這個引用,獲取事件源的引用,而後就能夠對事件源進行操做
     * @return void
     * @throws
     */
    public void isReading(Event event);
}
  • 事件對象:持有事件源的引用
package com.petro.listener;
/**
 * @ClassName: Event
 * @description: 事件對象
 * @author Petro Chen
 * @date: 2017年9月12日下午11:41:28
 */
public class Event {
    // 放置事件源的引用
    private Student student;

    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }
}

  到此爲止,咱們的監聽模式寫完了,接下來固然是測試啦ide

  • 測試部分:監聽接口實現
package com.petro.test;

import com.petro.listener.Event;
import com.petro.listener.Listener;
/**
 * @ClassName: ReadListener
 * @description: 監聽器實現,讀書(read方法)監聽器
 * @author Petro Chen
 * @date: 2017年9月13日上午12:03:35
 */
public class ReadListener implements Listener {

    @Override
    public void isReading(Event event) {
        /**
         * 使用 event.getStudent()方法獲取事件源的引用,而後執行相關操做
         */
        System.out.println("正在讀書...");
    }

}
  • 測試部分:程序入口
package com.petro.test;

import com.petro.listener.Student;
/**
 * @ClassName: Test
 * @description: 監聽器模式測試
 * @author Petro Chen
 * @date: 2017年9月13日上午12:07:04
 */
public class Test {
    public static void main(String[] args) {
        ReadListener readListener = new ReadListener();
        Student student = new Student();
        student.setReadListener(readListener);
        // 當執行這個方法時,會自動調用ReadListener.isReading()方法
        student.read();
    }
}
  • 監聽模式demo地址,有須要的能夠去clone
https://github.com/MiniPeter/...

結語

  本篇博文到此差很少就結束啦,對本篇博文有建議或者疑惑的能夠留言評論哦。歡迎指正錯誤>_<測試

相關文章
相關標籤/搜索