生活中,監聽無處不在。好比說,手機播放音樂功能,也是一種監聽:你不點擊播放按鈕,手機就不放歌,當你點擊時,手機就播放音樂。即觸發某種行爲,便執行相應的動做。git
PS:好吧,說的有點暈,由於我也是剛學的啦,看的暈的同窗直接看代碼就行了。github
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); } } }
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(); } }
https://github.com/MiniPeter/...
本篇博文到此差很少就結束啦,對本篇博文有建議或者疑惑的能夠留言評論哦。歡迎指正錯誤>_<測試