观察者模式之--事件监听模式

 

事件监听模式是观察者模式的一种特殊情况,在事件监听模式中有三个重要的概念:

  -- 事件源(source)

  -- 事件对象 (Event)

  -- 事件监听器(Listener)

这三个名称的解释可以先缓一缓,看完理解之后自然会知道其含义,先回顾一下观察者模式:

观察者模式中主要由被观察者观察者这两个模块构成,观察者模式比较简单,每添加一个观察者对象到被观察者中时会触发执行被观察者对象中的所有观察者的逻辑。

事件监听模式与观察模式很相似:

  1. 都采用了遍历的方式来处理事件的方式

  2. 事件监听模式中的事件源相当于观察者模式中的被观察者

  3. 事件监听模式中的事件监听器相当于观察者模式中的观察者

不同的是,相对“观察者模式”,“事件监听模式”在传递的参数方面做了进一步的工作,在观察者模式中调用“添加观察者”模块(上图)可以给观察者对象传递参数。在事件监听模下“观察者参数”升级为了一个事件,事件的实例对象也就是事件对象。

相比观察者模式中的观察者参数,事件监听模式中的事件对象能做的事情更多,它在内部定义了一个Object的对象source,作用是将事件源与事件对象捆绑到一起,在事件监听器执行逻辑时,就可以同时操作事件对象与事件源对象了。

 这里使用一个按钮监听的示例来展示一下事件监听模式的应用,首先给出设计的流程图:

 

 测试类:

package cjj.listener;

/**
 * @author chenjunjie
 * @since 2018-05-14
 */
public class MainTest {
    public static void main(String[] args) {
        Button buttonDemo = new Button("button123") ;
        // 添加监听器
        buttonDemo.addButtonClickListener(new ButtonClickListener(){

            @Override
            public void buttonClicked(ButtonClickEvent e) {
                e.alert();
                // 获取事件源
                Button source = (Button)e.getSource();
                System.out.println("按钮的名称: " + source.getButtonName());
                System.out.println("按钮的颜色:" + Color.getNameByIndex(source.getColorIndex()));
            }

            @Override
            public void changeButtonColor(ButtonClickEvent e) {
                System.out.println("-------------");
                System.out.println("改变按钮颜色...");
                Button source = (Button)e.getSource();
                source.setColor(Color.Red.getIndex());
                System.out.println("按钮的颜色:" + Color.getNameByIndex(source.getColorIndex()));
            }
        });

        // do something

        // 模拟点击按钮,事件触发
        buttonDemo.ButtonClick();
    }
}

 

结果:

    

 

附件:
上面例子的源代码  cjj.rar

 

转载于:https://www.cnblogs.com/chenjunjie12321/p/9041017.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值