wordpress导航图标,优化关键词技巧,中文网站开发语言,wordpress拍卖插件观察者模式又叫做发布-订阅(Publish/Subscribe)模式。观察者模式定义了一种一对多的依赖关系#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时#xff0c;会通知所有观察者对象#xff0c;使它们能够自己更新自己。Observer结构图.pngSubj…观察者模式又叫做发布-订阅(Publish/Subscribe)模式。观察者模式定义了一种一对多的依赖关系让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时会通知所有观察者对象使它们能够自己更新自己。Observer结构图.pngSubject类可翻译成为主题或抽象通知者一般用一个抽象类或者一个接口实现。它把所有对观察者对象的引用保存在一个集合里每个主题都可以有任何数量的观察者。抽象主题提供一个接口可以增加和删除观察者对象。interface Subject {//添加观察者void addObserver(Observer obj);//移除观察者void deleteObserver(Observer obj);//当主题方法改变时,这个方法被调用,通知所有的观察者void notifyObserver();}Observer类抽象观察者为所有的具体观察者定义一个接口在得到主题的通知时更新自己这个接口叫做更新接口。抽象观察者一般用一个抽象类或者一个接口实现更新接口通常包含一个Update()方法这个方法叫做更新方法。interface Observer {public void update();}ConcreteSubject类叫做具体主题或具体通知者将有关状态存入具体观察者对象在具体主题的内部状态改变时给所有登记过的观察者发出通知。这里举例老师给学生布置作业。public class TeacherSubject implements Subject {//用来存放和记录观察者private List observersnew ArrayList();//记录状态的字符串private String info;Overridepublic void addObserver(Observer obj) {observers.add(obj);}Overridepublic void deleteObserver(Observer obj) {int i observers.indexOf(obj);if(i0){observers.remove(obj);}}Overridepublic void notifyObserver() {for (Observer observer:observers) {observer.update();}}public String getInfo() {return info;}public void setInfo(String info) {this.info info;}}ConcreteObserver类具体观察者实现抽象观察者角色所要求的更新接口以便使本身的状态与主题状态相协调具体观察者角色可以保存一个指向具体主题对象的引用。public class StudentObserver implements Observer {//保存一个Subject的引用,以后如果可以想取消订阅,有了这个引用会比较方便private TeacherSubject teacher;//学生的姓名,用来标识不同的学生对象private String name;//构造器用来注册观察者public StudentObserver(String name,TeacherSubject teacher) {this.namename;this.teacher teacher;//每新建一个学生对象,默认添加到观察者的行列teacher.addObserver(this);}Overridepublic void update() {System.out.println(name得到作业:teacher.getInfo());}}测试用例public class TestObserver {public static void main(String []args) throws Exception {TeacherSubject teachernew TeacherSubject();StudentObserver jacknew StudentObserver(jack,teacher);StudentObserver marknew StudentObserver(mark,teacher);teacher.setInfo(测试题1);teacher.notifyObserver();teacher.setInfo(测试题2);teacher.deleteObserver(jack);teacher.notifyObserver();}}输出结果jack得到作业:测试题1mark得到作业:测试题1mark得到作业:测试题2观察者模式在android中的应用首先在Android中我们往ListView添加数据后都会调用Adapter的notifyDataChanged()方法其中使用了观察者模式。当ListView的数据发生变化时调用Adapter的notifyDataSetChanged函数这个函数又会调用DataSetObservable的notifyChanged函数这个函数会调用所有观察者(AdapterDataSetObserver)的onChanged方法在onChanged函数中又会调用ListView重新布局的函数使得ListView刷新界面。