您的位置:首页 > 编程语言 > Java开发

好记性不如烂笔头37-java应用中的监听器Listener(1)

2015-02-06 11:07 417 查看
监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行。

在很多的地方,很多的行为,都需要去监听。比如我们有一辆汽车,汽车点火之后,我们要检查汽车的各项状态;汽车开动之后,要做一些处理,这些都可以通过监听去实现。

我们如果想设计一个汽车,让这个汽车的各种状态可以被别的系统监听又该怎么做呢,可以按照严格的事件处理模型来设计一个对象,这个对象就可以被别的对象监听,事件处理模型涉及到三个组件:事件源、事件对象、事件监听器。

1、 J***A实现事件监听器(模拟监控汽车的部分行为)

在带宽不够的时候,压缩是一种解决事情的好方法;现在的带宽是越来越大了,不过文件也越来越大,压缩还是有英雄用武之地的。其中百度等网站也是使用压缩的数据传递方式。

一个事件监听主要包括三块:事件源、事件对象、事件监听器,以及额外的一个监听者(监听的测试类)。下面模拟对汽车的简单监控,总共四个类。

[code]package com.listener;

/**
 * 一个简单的能够被监听的对象,比如一辆汽车,点火、运行等各种动作都需要被监控
 * @author 范芳铭
 */
public class EasyCar {

    private EasyCarListener listener;

    //汽车点火
    public void start() {
        if (listener != null) {
            listener.doStart(new EasyCarEvent(this));
        }
    }

    //汽车开始跑起来
    public void run() {
        if (listener != null) {
            listener.doRun(new EasyCarEvent(this));
        }
    }

    //这个方法是用来注册对Person类对象的行为进行监听的监听器
    public void registerListener(EasyCarListener listener) {
        this.listener = listener;
    }
}

package com.listener;
/**
 * 一个简单(事件源)的监听器接口
 * @author 范芳铭
 */
interface EasyCarListener {
    void doStart(EasyCarEvent e);
    void doRun(EasyCarEvent e);
}

package com.listener;
/**
 * 一个简单的事件对象,用来封装事件源能够被监听的对象
 * @author 范芳铭
 */
class EasyCarEvent {
    private EasyCar source;
    public EasyCarEvent() {

    }
    public EasyCarEvent(EasyCar source) {
        this.source = source;
    }
    public EasyCar getSource() {
        return source;
    }
    public void setSource(EasyCar source) {
        this.source = source;
    }
}

package com.listener;

/**
 * 一个简单的能够被监听的对象
 * @author 范芳铭
 */
public class EasyCarTest {
    public static void main(String[] args) {
        EasyCar p = new EasyCar();
        //注册监听p对象行为的监听器
        p.registerListener(new EasyCarListener() {
            //监听汽车点火的行为
            public void doStart(EasyCarEvent e) {
                EasyCar p = e.getSource();
                System.out.println("汽车已经点火,正在自动检测阿饭同学汽车的各种属性...");
                System.out.println("阿饭同学的汽车的胎压正常。");
                System.out.println("阿饭同学的汽车的动力系统正常。");
                System.out.println("阿饭同学的汽车的安全系统正常。");
                System.out.println("...");
            }
            //监听汽车开始跑起来
            public void doRun(EasyCarEvent e) {
                EasyCar p = e.getSource();
                 System.out.println("阿饭同学汽车的开始运行...");
                 System.out.println("自动关闭车门。");
                 System.out.println("自动关闭油箱。");
                 System.out.println("自动打开音乐。");
                 System.out.println("...");
            }
        });
        System.out.println("完成了监听,下面开始监控汽车的行为。");
        p.start();
        p.run();
    }
}


2、 运行结果

完成了监听,下面开始监控汽车的行为。

汽车已经点火,正在自动检测阿饭同学汽车的各种属性…

阿饭同学的汽车的胎压正常。

阿饭同学的汽车的动力系统正常。

阿饭同学的汽车的安全系统正常。



阿饭同学汽车的开始运行…

自动关闭车门。

自动关闭油箱。

自动打开音乐。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: