自己对观察者模式的理解:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
我们已例子来说明:
接口:包含更新数据的方法
package com.example.xxnan.suanfa.observer; /** * Created by Administrator on 2016/4/12. */ public interface IDataChange { public int notify(int i); }Class1类:
package com.example.xxnan.suanfa.observer; /** * Created by Administrator on 2016/4/12. */ public class Class1 implements IDataChange { public Class1() { ClassTest.addListener(this); } @Override public int notify(int i) { System.out.println(this.getClass().getName() + "--->i=" + i); return i; } }Class2类:
package com.example.xxnan.suanfa.observer; /** * Created by Administrator on 2016/4/12. */ public class Class2 implements IDataChange { public Class2() { ClassTest.addListener(this); } @Override public int notify(int i) { System.out.println(this.getClass().getName()+"--->i="+i); return i; } }Class1和Class2都实现了IDataChange接口,并且打印了类名,并且在构造方法中都注册了监听事件.
那么我们来看一下ClassTest类:
package com.example.xxnan.suanfa.observer; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2016/4/12. */ public class ClassTest { private static List<IDataChange> observers; public ClassTest() { observers=new ArrayList<IDataChange>(); } public static void addListener(IDataChange iDataChange) { if(iDataChange!=null&&!observers.contains(iDataChange)) { observers.add(iDataChange); } } public static void removeListener(IDataChange iDataChange) { if(iDataChange!=null&&observers.contains(iDataChange)) observers.remove(iDataChange); } public static List<IDataChange> getObservers() { return observers; } }显而易见的有添加和一处Listener方法。
再看下测试:
/********************************************/ //观察者模式 Class1 class1=new Class1();//构造方法里面就注册了 Class2 class2=new Class2();//构造方法里面就注册了 List<IDataChange> observers= ClassTest.getObservers(); for(IDataChange iDataChange:observers) { iDataChange.notify(20);//遍历通知所有的被观察者更新数据 } /********************************************/以上就是我对观察者模式的简单理解,如有不正确请指出!