一、基本概念:
观察者模式属于行为型模式,其意图是定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
观察者模式属于行为型模式,其意图是定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
这一个模式的关键对象是目标(Subject)和观察者(Observer)。一个目标可以有任意数目的依赖它的观察者,一旦目标的状态发生改变,所有的观察者都得到通知,作为对这个通知的响应,每个观察者都将查询目标以使其状态与目标的状态同步。
适用场景:
观察者模式,用于存在一对多依赖关系的对象间,当被依赖者变化时,通知依赖者全部进行更新。因此,被依赖者应该有添加/删除依赖者的方法,且可以将添加的依赖者放到一个容器中;且有一个方法去通知所有依赖者进行更新。一般Observer模式的最知名的应用是在MVC结构,Observer模式也可以应用在文档和图表程序的制作
二、实例:
老师换号码,学生需要知道老师的号码必要时可以拨打。分析得出,老师就是一个被观察者(Subject),学生就是需要知道号码的观察者(Observer),当老师的电话号码发生改变时,学生得到通知,并更新相应的号码。
思想:老师换号码,学生需要知道老师的号码必要时可以拨打。分析得出,老师就是一个被观察者(Subject),学生就是需要知道号码的观察者(Observer),当老师的电话号码发生改变时,学生得到通知,并更新相应的号码。
建立目标(subject)与观察者(observer)接口:
//被观察者
public interface Subject {
public void add(Observer o);
public void add(Observer o);
public void del(Observer o);
public void notice();
}
public void notice();
}
//观察者
public interface Observer {
public void update();
}
public void update();
}
建立一个当目标状态发生改变时,发布通知给观察者对象的方法
public class Teacher implements Subject {
private String phone;
private Vector<Observer> students;
public Teacher(){
phone = "";
students = new Vector<Observer>();
}
public void add(Observer o) {
students.add(o);
}
private String phone;
private Vector<Observer> students;
public Teacher(){
phone = "";
students = new Vector<Observer>();
}
public void add(Observer o) {
students.add(o);
}
public void del(Observer o) {
students.remove(o);
}
public void notice() {
for(int i=0;i<students.size();i++){
students.get(i).update();
}
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
notice();
}
}
students.remove(o);
}
public void notice() {
for(int i=0;i<students.size();i++){
students.get(i).update();
}
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
notice();
}
}
建立一个当收到目标通知后的更新方法
public class Student implements Observer {
private String name;
private String phone;
private Teacher teacher;
public Student(String name,Teacher teacher){
this.name = name;
this.teacher = teacher;
}
public void show(){
System.out.println("Name:"+name+"----Teacher's phone:"+phone);
}
private String phone;
private Teacher teacher;
public Student(String name,Teacher teacher){
this.name = name;
this.teacher = teacher;
}
public void show(){
System.out.println("Name:"+name+"----Teacher's phone:"+phone);
}
public void update() {
phone = teacher.getPhone();
}
phone = teacher.getPhone();
}
}
测试
public class ObserverTest {
public static void main(String[] args) {
Vector<Observer> students = new Vector<Observer>();
Teacher teacher = new Teacher();
for(int i= 0 ;i<10;i++){
Student st = new Student("MM"+i,teacher);
students.add(st);
teacher.add(st);
}
teacher.setPhone("10086");
for(int i=0;i<10;i++){
((Student)students.get(i)).show();
}
teacher.setPhone("1380013800");
for(int i=0;i<10;i++){
((Student)students.get(i)).show();
}
}
}
Vector<Observer> students = new Vector<Observer>();
Teacher teacher = new Teacher();
for(int i= 0 ;i<10;i++){
Student st = new Student("MM"+i,teacher);
students.add(st);
teacher.add(st);
}
teacher.setPhone("10086");
for(int i=0;i<10;i++){
((Student)students.get(i)).show();
}
teacher.setPhone("1380013800");
for(int i=0;i<10;i++){
((Student)students.get(i)).show();
}
}
}
相关推荐
观察者模式的定义: 在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。 大白话: 其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没...
Java设计模式之观察者模式 定义:观察者模式是一种行为类模式,定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。 结构: * 被观察者(Subject):从...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
**观察者模式(Observer Pattern)**是软件设计模式中的一种行为模式,它在Java中有着广泛的应用。这个模式的核心思想是“一对多”的依赖关系,即一个主题对象(Subject)可以被多个观察者(Observer)关注,当主题...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或者发布...
结合微信公众号讲解观察者模式,生动形象,关键是上手快啊
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被...
首先,我们来看"Java设计模式——观察者模式的两种情况": 1. **主动通知**: 在这种情况下,被观察者对象在自身状态发生变化时,会主动调用`Observable`接口提供的`notifyObservers()`方法,将变化通知给所有注册的...
在Java编程领域,设计模式是一种被广泛采用的最佳实践,它为解决常见的软件设计问题提供...在Java中,`java.util.Observable`和`java.util.Observer`是内置的观察者模式实现,可以方便地用于快速构建观察者模式的系统。
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在软件开发中广泛应用于事件驱动...
Java设计模式是软件工程中的一种最佳实践,它总结了在特定场景下解决常见问题的经验,为程序员提供了可重用的解决方案。本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与...
在Java中,`java.util.Observable`和`java.util.Observer`接口提供了观察者模式的实现。例如,当我们有一个`WeatherStation`类(被观察者)和多个`WeatherDisplay`类(观察者)时,`WeatherStation`的气象数据变化会...
- 观察者模式:定义对象之间的一对多依赖关系,当一个对象的状态改变时,所有依赖于它的对象都会得到通知并自动更新。 - 状态模式:允许对象在其内部状态改变时改变其行为,看起来像改变了它的类。 - 策略模式:...