一.概念
在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
观察者模式也被称之为:主题-观察者模式,发布-订阅模式,前者是一,后者是多。
二.UML
- Subject(主题类),最主要的方法:添加/删除观察者,改变状态,通知观察者。
- Observer(观察者类),当主题状态改变,通知观察者时,触发观察者的update方法。
三.实例分析
《那些年,我们一起追的女孩》让我回到了高中,想到了以前的同桌,那个我暗恋N久的女孩子。那时候,我们一起下课,一起吃饭,一起逃课,一起翻 墙...往事啊,泪奔
...好了,回归正题,再说要被大家喷了。我跟她是一个班,我们是一个班主任,班主任不在,我们可以嘻嘻哈哈玩玩耍耍,班主任来了,我们还是得收敛点。
对比一下概念:班主任是一,我和她是多,我们依赖班主任,班主任状态改变了(不在教室变成了在教室),我们就要做点改变了。
Teacher
package com.zzy.observer;
import java.util.Observable;
/**
* 主题
* @author eason
*
*/
public class Teacher extends Observable{
public void setChanged() {
super.setChanged();
}
}
Student
package com.zzy.observer;
import java.util.Observable;
import java.util.Observer;
/**
* 观察者
* @author eason
*
*/
public class Student implements Observer{
private String name;
private String action;
public Student(String name, String action) {
this.name = name;
this.action =action;
}
@Override
public void update(Observable o, Object arg) {
System.out.println(this);
}
@Override
public String toString() {
return "学生" + name + action;
}
}
TestObserver
package com.zzy.observer;
/**
* 测试类
* @author eason
*
*/
public class TestObserver {
public static void main(String[] args) {
//班主任
Teacher teacher = new Teacher();
//我和她
Student stu1 = new Student("eason", "收起手机");
Student stu2 = new Student("grace", "停止睡觉");
//我跟她所属的班主任
teacher.addObserver(stu1);
teacher.addObserver(stu2);
//老师来了
teacher.setChanged();
teacher.notifyObservers();
}
}
java.util.Observable和java.util.Observer比较简单,有兴趣大家自己去研究下。
四.使用场景
- 当一个对象的改变会引起其他对象的改变,这个时候,考虑观察者模式。比喻java.util.Swing中的事件监听。
五.使用感受
- java.util.Observable内部用一个Vector实现。学习的过程中,自己写一个Observable收获颇多。
- 松耦合,主题不知道观察者的具体细节(update方法的具体实现),只要你实现了观察者接口就行。
- 主题向观察者推数据。
分享到:
相关推荐
通过学习观察者模式,你不仅可以提高代码的可维护性和可扩展性,还能更好地理解和利用面向对象设计的原则,如开闭原则(对扩展开放,对修改关闭)。此外,了解并熟练运用观察者模式还有助于你理解和使用其他设计模式...
观察者模式(Observer)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在C++中广泛应用,特别是在需要...
观察者模式是目前应用最广、影响范围最大的模式之一,因为 Observer 的一个实例 MVC结构(Model/View/Control )在系统开发架构设计中有着很重要的地位和意义,实现了业务逻辑和表示层的解耦。下面示例代码以篮球...
总的来说,HeadFirst设计模式的学习笔记2关于观察者模式的演示,旨在帮助开发者理解如何使用观察者模式来构建可扩展的系统。通过实际的代码示例,我们可以更深入地掌握这一模式,并将其应用到日常开发中,提升代码的...
本文将深入探讨一种常用的设计模式——观察者模式(Observer Pattern),并结合Android实际应用给出实例解析。 观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,...
观察者设计模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的...通过学习和分析源码,我们可以更好地掌握观察者模式的原理和应用场景,提高我们的设计能力。
在“跟我一起学 设计模式-观察者模式”这个资源中,我们可能会学习到以下几个关键知识点: 1. **观察者模式的核心概念**:包括主题(Subject)和观察者(Observer)两个主要角色。主题是被观察的对象,它维护着一个...
观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计中的一种行为模式。在iOS开发中,它是一种让多个对象监听或订阅某一个主题对象的状态变化,并在状态变化时自动收到通知的方式。这种模式使得...
观察者模式和设计模式是软件工程中至关重要的概念,它们为构建可维护、可扩展的系统提供了基础。本文将深入探讨这两个设计模式以及与之相关的Java实现。 首先,观察者模式(Observer Pattern)是一种行为设计模式,...
通过分析这个示例,我们可以学习如何在实际项目中应用观察者模式,理解如何在数据变化时维护对象间的松耦合,以及如何在Android开发中有效地更新UI。这种模式对于处理事件驱动和响应式编程场景非常有用,因为它允许...
在Java中,可以使用`java.util.Observable`和`java.util.Observer`接口来实现观察者模式: ```java class Subject extends Observable { void changeState() { setChanged(); // 标记状态已改变 notifyObservers...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...
在Java编程领域,设计模式是解决常见问题的模板或最佳实践。在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的...分析和学习这些代码将有助于深入理解MVC和观察者模式的实际应用。
设计模式分为三类:创建型模式(如单例模式、工厂方法模式)、结构型模式(如代理模式、装饰器模式)和行为型模式(如观察者模式、策略模式)。每种模式都有其特定的用途和适用场景。 4. **具体设计模式详解** - ...
这份资料非常全面且详细,覆盖了 设计模式 基础学习的方方面面,非常适合初学者入门! 资料也按目录进行编排,每一章下面都有更具体的内容: 结构型模式(7节) 第1节:适配器模式 第2节:桥接模式 第3节:组合模式 ...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...
- **观察者模式**(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 - **状态模式**(State):允许一个对象在其内部状态改变时改变它的...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在Java中被广泛应用,特别是...
总之,《新版设计模式手册 - C#设计模式(第二版)》是学习和掌握C#设计模式的宝贵资源,通过学习和实践书中的内容,开发者能够提升软件设计能力,编写出更优雅、可维护的代码。这本书将帮助你从一个代码实现者成长为...
通过学习和实践观察者模式,开发者能够更好地理解如何在对象之间建立松耦合的关系,使代码更易于维护和扩展。同时,它也是实现反应式编程的基础,有助于构建更灵活、响应更快的系统。在Java中,`java.util....