观察者设计模式

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
}

原文地址:https://www.cnblogs.com/xumaodun/p/4910804.html