java事件。

事件一共有三个主体。

1.事件源(Source Object),事件的发起者。

2.监听器(Listener),监听事件的人。

3.事件(Event)本身。


举个栗子:

你在看某个漂亮小姐姐的直播,当这个小姐姐给你唱了首歌的时候,你给他打赏了一个土豪飞机礼物。


1.上面这句话中,小姐姐是事件源,而你则是监听器,监听着小姐姐。

2.小姐姐唱歌了,你则打赏了礼物。这两个步骤是一个连贯的事情,而这个事情可以清楚的知道事件源和做出反应的人是谁。



流程:在事件源中注册监听器,当满足了一定条件之后调用监听器的方法,创建一个事件对象作为参数传进去。而事件对象中记录了事件源



java.util.EventListener

所有监听器必须实现该接口,该接口没有任何方法只是一个规范。


java.util.EventObject

该类为事件对象本身。类中有成员变量专门记录事件源。即发起事件的对象。


/**
 * 事件源
 *
 * Created by Max on 2017/8/11.
 */
public class XiaoJieJie {

    //注册事件
    private EventListener eventListener;

    private int age;

    XiaoJieJie(){};

    XiaoJieJie(EventListener eventListener){
        this.eventListener = eventListener;
    }

    //唱歌
    public void sing(){
        ++age;
        if(eventListener != null){
            //调用注册器方法。新建事件对象,当前对象为事件源。
            ((MyEventListener)eventListener).daShang(new MyEvent(this));
        }
    }

    public EventListener getEventListener() {
        return eventListener;
    }

    public void setEventListener(EventListener eventListener) {
        this.eventListener = eventListener;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}


/**
 * 监听器
 *
 * Created by Max on 2017/8/11.
 */
public class MyEventListener implements EventListener {

    //监听着
    private String name;

    MyEventListener(String name){
        this.name = name;
    }

    //打赏方法
    void daShang(MyEvent event){
        System.out.println("小姐姐唱歌了," + name + "打赏土豪飞机礼物了~");
    }

}


/**
 * 事件对象,作为参数传给监听器,事件对象中记录了事件源。
 *
 * Created by Max on 2017/8/11.
 */
public class MyEvent extends EventObject {

    /**
     * Constructs a prototypical Event.
     *
     * @param source The object on which the Event initially occurred.
     * @throws IllegalArgumentException if source is null.
     */
    public MyEvent(Object source) {
        super(source);
    }

    //获取事件源
    public Object getEventSource(){
        return getSource();
    }

}


public class Test {

    public static void main(String[] args) {

        XiaoJieJie p = new XiaoJieJie(new MyEventListener("张三"));
        p.sing();//输出 小姐姐唱歌了,张三打赏土豪飞机礼物了~


    }

}


监听一件事情是可以被代理的,有一天你有事情,晚上不能给小姐姐打赏,但是你可以让你室友来帮你做这件事情。
让他来帮你打赏,要注意的是,此时事情的发起者是小姐姐,逻辑上来说意图监听这件事情的人还是你,只不过你室友在帮你监听而已。

java.util.

EventListenerProxy<T extends EventListener>
该抽象类可以帮你代理你自定义的事件。

/**
 *  事件注册代理
 *
 * Created by Max on 2017/8/11.
 */
public class MyEventListenerProxy extends EventListenerProxy<MyEventListener> {

    //代理者
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    /**
     * Creates a proxy for the specified listener.
     *
     * @param listener the listener object
     */
    public MyEventListenerProxy(MyEventListener listener) {
        super(listener);
    }

    public void register(XiaoJieJie p){
        p.setEventListener(getListener());
    }

}


public class Test {

    public static void main(String[] args) {

//        XiaoJieJie p = new XiaoJieJie(new MyEventListener("张三"));
//        p.sing();//输出 小姐姐唱歌了,张三打赏土豪飞机礼物了~

        XiaoJieJie p1 = new XiaoJieJie();
        //李四基友帮助李四完成打赏这件事情。
        MyEventListenerProxy eventListenerProxy = new MyEventListenerProxy(new MyEventListener("李四"));
        eventListenerProxy.setName("李四基友");
        eventListenerProxy.register(p1);
        p1.sing();//输出 小姐姐唱歌了,李四打赏土豪飞机礼物了~

    }

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值