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
    }

  • 相关阅读:
    Vasya and Endless Credits CodeForces
    Dreamoon and Strings CodeForces
    Online Meeting CodeForces
    数塔取数 基础dp
    1001 数组中和等于K的数对 1090 3个数和为0
    1091 线段的重叠
    51nod 最小周长
    走格子 51nod
    1289 大鱼吃小鱼
    POJ 1979 Red and Black
  • 原文地址:https://www.cnblogs.com/xumaodun/p/4910804.html
Copyright © 2011-2022 走看看