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
    }

  • 相关阅读:
    .NET:如何应对边界异常?
    由极点五笔到QQ五笔的转换想到的
    【转】七个受用一生的心理寓言
    proverb: better late than never
    背单词软件supermemo从2006版升级到2008版
    今天解决一个异步刷新TreeView的问题
    开始尝试换成Windows 7了
    southpaw
    用supermemo背单词达到6000词条
    Averse, Adverse
  • 原文地址:https://www.cnblogs.com/xumaodun/p/4910804.html
Copyright © 2011-2022 走看看