zoukankan      html  css  js  c++  java
  • 观察者设计模式

    1. java中的监听机制

    a) java中的事件监听机制涉及到 三个 部分 : 事件源. 事件对象, 事件监听器

    b) 当操作 事件源的时候, 会触发 事件 对象, 同时回去调用 事件监听器的某个特定的方法. 在调用这个方法的时候 传递的是 事件 对象

    c) 事件对象用来 封装 事件源, 通过事件对象可以拿到 事件源的 引用. 

    d) 事件监听器 通常 都是 一个接口, 事件监听器的具体实现类 由 程序员 自己去编写. 那么每个方法的代码就可以自己去控制. 在每个方法被调用的时候.传递进来了一个参数叫做 事件对象, 通过事件对象就可以拿到 事件源. 从而 干自己想干的事儿.

    2. 代码实现监听机制

    //事件源

    public class Person {

      private PersonListener pl;

      public void eat(){

      Event e = new Event(this);
      pl.doEat(e);
      System.out.println(" eat ......");
    }

    public void run(){

      Event e = new Event(this);
      pl.doRun(e);
      System.out.println(" run ......");
    }

    public void addPersonListener(PersonListener pl){
      this.pl = pl;
    }

    }
    // 事件监听器的接口
    interface PersonListener {
      public void doEat(Event e);
      public void doRun(Event e);
    }

    // 事件对象 , 用于封装事件源

    class Event {
    private Person p;

      public Event(Person p ) {
      this.p = p;
      }

      //用于返回 事件源
      public Person getP() {
      return p;
      }

    }

    3. 如何调用

    public class Demo2 {
      public static void main(String[] args) {
        // Person
        Person p = new Person(); // 事件源
        // 事件监听器
        p.addPersonListener(new MyPersonListener());
        p.eat();
      }
    }

    class MyPersonListener implements PersonListener {

      @Override
      public void doEat(Event e) {
        Person p = e.getP();
        System.out.println(p+ " 在 吃 ..... ");
      }

      @Override
      public void doRun(Event e) {
        // TODO Auto-generated method stub
    }

  • 相关阅读:
    静态绑定与动态绑定
    Java之浅拷贝与深拷贝
    python类对象及类实例的创建过程
    以订单和商品为例进行详细的组内数据获取的分析
    根据给定时间及偏移的年份求偏移后时间的前一天(支持偏移量为正和负)
    mysql取到组内的前几条数据
    python进程通信的几种实现方式
    python-redis之数据类型二
    python-redis之数据类型
    python-redis
  • 原文地址:https://www.cnblogs.com/xumaodun/p/4910804.html
Copyright © 2011-2022 走看看