zoukankan      html  css  js  c++  java
  • Java监听模式

    说明

      生活中,监听无处不在。比如说,手机播放音乐功能,也是一种监听:你不点击播放按钮,手机就不放歌,当你点击时,手机就播放音乐。即触发某种行为,便执行相应的动作。

    组成

    1. Java监听模式右三个部分组成:事件源、事件对象、事件监听器
    2. 当事件源触发某种行为,会自动执行事件监听器里面相应的方法
    3. 事件监听器方法参数是事件对象,事件对象包含事件源的引用,在方法中可以获取事件源的引用

    PS:好吧,说的有点晕,因为我也是刚学的啦,看的晕的同学直接看代码就好了。

    实现

    • 事件源: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;
        }
    }
    

      到此为止,我们的监听模式写完了,接下来当然是测试啦

    • 测试部分:监听接口实现
    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/zeling1005/design-pattern/tree/master/listener

    结语

      本篇博文到此差不多就结束啦,对本篇博文有建议或者疑惑的可以留言评论哦。欢迎指正错误>_<

  • 相关阅读:
    Linux centos 安装php5.4和pthreads
    linux Nginx负载均衡
    linux 部署oracle 11g
    linux shell编程
    Linux 常 用 命 令
    python基础学习笔记的目录
    Python学习笔记之基础篇(-)python介绍与安装
    Python学习笔记之基础篇(二)python入门
    python 的logging 的配置,有这一篇就够了
    selenium+headless+proxy 的出错
  • 原文地址:https://www.cnblogs.com/zeling/p/8494826.html
Copyright © 2011-2022 走看看