Observer模式属于行为模式,是为了定义对象间的一种一对多的关系。当一个对象的状态发生改变时,所有依赖它的对象都将得到通知,并自动更新。模式的关键对象是目标(Subject)和观察者(Observer)。一个目标可以有任意数目的依赖它的观察者,一旦目标的状态发生改变,所有的观察者都得到通知,作为对这个通知的响应,每个观察者都将查询目标以使其状态与目标的状态同步。
【实例】老师有电话号码,学生需要知道老师的电话号码以便在需要的时候拨打,在这样的模式中,老师就是一个被观察者(Subject),学生就是需要知道信息的观察者。当老师的电话号码发生改变时,学生会得到通知,并更新相应的电话记录。
如图所示:
用Java代码实现:
public interface IObServer { public void update(String msg); }
public class Student implements IObServer { private String student_name; public Student(String name){ student_name = name; } @Override public void update(String msg) { // TODO Auto-generated method stub System.out.println(student_name + ":\t" + msg); } }
public interface ISubject { //添加一个通知 public void add(IObServer o); //移除一个通知 public void del(IObServer o); //执行下达通知的指令 public void notice(); }
import java.util.ArrayList; public class Teacher implements ISubject { //定义students:所有学生 private ArrayList<IObServer> students = new ArrayList<IObServer>(); private String msg = "";//老师要发出的信息 public void setMsg(String new_msg){ msg = new_msg; } @Override public void add(IObServer o) { students.add(o); } @Override public void del(IObServer o) { students.remove(o); } @Override public void notice() { for(int i=0;i<students.size();i++){ students.get(i).update(msg); } } }
public class Test { public static void main(String[] args) { ArrayList<IObServer> students = new ArrayList<IObServer>(); Teacher t = new Teacher(); for(int i=1;i<=10;i++){ Student s = new Student("aa"+i); students.add(s); t.add(s); } t.setMsg("phone:123456789"); t.notice(); System.out.println("-----把其中几个学生移除接收通知的范围-----------"); for(int i=0;i<students.size();i++){ if(i%2==0){ t.del(students.get(i)); } } t.notice(); } }
相关推荐
C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 (Level 300)
设计模式C++学习之观察者模式(Observer)
C#面向对象设计模式 (行为型模式) Observer 观察者模式 视频讲座下载
观察者模式 概述 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 适用性 1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面。 将这二者封装...
观察者模式(Observer) 用意:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。
定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
观察者模式通常的叫法叫做订阅-发布模式,类似于报刊杂志的订阅,观察者和被观察者就是读者和邮局的关系...观察者模式主要是用于解决对象之间一对多的关系。 类视图 实现 class Observer { public: virtual ~Observ
结合微信公众号讲解观察者模式,生动形象,关键是上手快啊
当一个对象的改变同时会影响其他对象的行为的时候,可以使用此设计模式。 l 主题对象 :一个需要被关注的主题对象,这个主题对象改变会影响其他对象的行为 l 订阅对象:当主题对象发生改变,订阅对象需要相应处理...
观察者模式(Observer Pattern)是一种对象行为型设计模式,它定义了对象之间的一对多依赖关系。 当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式通常用于实现分布式事件处理系统...
我们说学习Java应该从Swing开始,那么学习Swing最重要的思想就是对于观察者模式的理解(Observer Pattern)。因为,该设计模式在Java Swing框架中贯穿了始终。对于C#的委托、代理概念所使用的Callback(回调模式--...
主要介绍了C#设计模式之Observer观察者模式解决牛顿童鞋成绩问题,简单讲述了观察者模式的原理并结合具体实例形式分析了使用观察者模式解决牛顿童鞋成绩问题的具体步骤相关操作技巧,并附带demo源码供读者下载参考,...
NULL 博文链接:https://lgh3292.iteye.com/blog/600905
NULL 博文链接:https://jacky-dai.iteye.com/blog/1132063
NULL 博文链接:https://lgd-java2eye.iteye.com/blog/760350
用c++和lua实现的观察者模式小栗子,其中c++版本参考了别人的实现
从生活中的例子可以看出,只要对订阅号... 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己的行为。