观察者模式

IT IT哈哈
定义:一种对象对另一种对象存在某种依赖关系,当一个对象发生改变的时候,需要改变另一个对象的状态。
在设计一个系统的时候,经常会有这样一个需求,如果一个对象发生改变,需要改变另一个对象的数据。比如:Android客户端的一个控件ListView,当数据发生改变的时候,我们需要通知对象,刷新当前控件。
观察者模式一般有以下四个角色:
观察者:作用是观察每个对象是否需要改变
被观察者:只是一个接口,观察者观察的接口
具体的被观察者:这个是观察者具体要观察的对象
说的比较抽象,具体我们看代码,这里以自定义事件的方法来描述:

public class View {      private List<Listener> listeners = new ArrayList<>();      public void addListener(Listener listener){          listeners.add(listener);      }           public void removeListener(Listener listener){          listeners.remove(listener);      }           public void click(){          if(null != listeners && listeners.size() > 0){              for(Listener listener : listeners){                  listener.onClick();              }          }      }        }  public interface Listener {        public void onClick();  }   public class Button implements Listener {      @Override      public void onClick() {          System.out.println("点击了Button!");         }        }  public class TextView implements Listener {        @Override      public void onClick() {          System.out.println("点击了TextView!");      }    }  public static void main(String[] args) {          View view = new View();          view.addListener(new Button());          view.addListener(new TextView());          view.click();   }  

测试类添加了两个被观察者:Button和TextView,调用click方法,则同时触发了Button和TextView:
点击了Button!
点击了TextView!

首先我们定义一个View(即观察者),类里面addListener是添加被观察者的方法,然后增加click方法,里面的操作很简单,就是循环所有被观察者,调用onClick方法,这样每次增加一个对象,就实现Listener类,就可以在不改变原有逻辑的情况下增加被观察者,达到了对象间的解耦。

如果想自定义一个事件,使用观察者模式是一个不错的选择,android客户端的ListView的实现,其中就采用了观察者模式。

更多相关文章

  1. 用 globalThis 访问全局对象[每日前端夜话0xF6]
  2. 什么是 Java 对象分配率
  3. 如何用 Map 对象创建 Set 对象
  4. 用map代替纯JavaScript对象[每日前端夜话0xCF]
  5. 美元。针对简单的php, post返回对象
  6. 将JavaScript对象作为Dictionary 传递给C#WCF服务
  7. 通过],[和创建json对象来分割字符串
  8. 我通过jQuery-ajax创建了__PHP_Incomplete_Class对象此错误
  9. 如何从Python脚本向jQuery发送JSON对象?

随机推荐

  1. Android EditText 自动获取焦点,并弹出键
  2. 判断客户端类型
  3. Android一日笔记
  4. Android:控件的对象修改控件的值
  5. Android中JNI实现
  6. 判断android devices是否联网
  7. Android TextView背景跟随焦点的变化
  8. Android LayoutInflater.inflate(R.layou
  9. android 屏幕保持唤醒 不锁屏
  10. Android工程的自动创建,编译并生成apk