观察者模式又被称为依赖(Dependents)或发布-订阅模式(Publish-Subscribe).
意图: 定义对象间的一种一对多的依赖关系, 当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新.
问题: 当某个事件发生时,你需要相一系列对象发出通知, 而这个对象的列表是变化的.
实现:
- 让"希望知道某个事件何时发生"的对象(Observer)将自己注册到另一个"监视时间发生或自己触发事件"的对象(Subject)上.
- 当事件发生时, Subject 告诉 Observer "你关心的事件已经发生了"
- 为了能让所有的观察者型对象实现Observer接口,有时候需要使用Adapter模式.
示意图:
示例:
在Java包中容纳了Oberver模式的一个实现版本.Observable类和Observer接口组成了这个模式. Observable类扮演了Subject的角色,是被观察者, Observer是观察者的超类.
主题(被观察者):
java 代码
- public class Observable {
- private boolean changed = false;
-
- private Vector obs;
-
- public Observable() {
- obs = new Vector();
- }
-
- public synchronized void addObserver(Observer o) {
- if (o == null)
- throw new NullPointerException();
- if (!obs.contains(o)) {
- obs.addElement(o);
- }
- }
-
- public synchronized void deleteObserver(Observer o) {
- obs.removeElement(o);
- }
-
- public void notifyObservers() {
- notifyObservers(null);
- }
-
- public void notifyObservers(Object arg) {
-
-
-
-
- Object[] arrLocal;
-
- synchronized (this) {
-
-
-
-
-
-
-
-
-
-
-
-
- if (!changed)
- return;
- arrLocal = obs.toArray();
- clearChanged();
- }
-
- for (int i = arrLocal.length-1; i>=0; i--)
- ((Observer)arrLocal[i]).update(this, arg);
- }
-
- public synchronized void deleteObservers() {
- obs.removeAllElements();
- }
-
- protected synchronized void setChanged() {
- changed = true;
- }
-
- protected synchronized void clearChanged() {
- changed = false;
- }
-
- public synchronized boolean hasChanged() {
- return changed;
- }
-
- public synchronized int countObservers() {
- return obs.size();
- }
- }
观察者超类:
java 代码
-
- public interface Observer {
- void update(Observable o, Object arg);
- }
观察者扩展类:
java 代码
-
- public class Observer1 implements Observer {
-
- public void Observer1(){
- Observable observable = new Observable();
- observable.addObserver(this);
- }
- void update(Observable o, Object arg){
-
- System.out.println("O has changed, I get it!");
- }
- }
示例2:
有一个系统, 不定时的收到很多信息,如天气预报, 体育新闻, 国际新闻, 最新歌曲等, 每次有新的信息到达时, 系统将这些信息发送给不同的订阅客户,这些客户都订阅了这些主题中的一个或多个. 客户也可以选择订阅和退定.
这是一个典型的订阅/发布系统: 这些不同信息就相当于不同的主题(Subject), 不同内容的订阅客户就相当于观察者(Observer). 例子以后再写喽!
分享到:
相关推荐
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动编程或者...
Observer模式,也称为发布-订阅(Publish/Subscribe)模式,是一种行为设计模式,它允许对象在状态发生改变时通知其他对象,而无需显示地指定这些对象。在Java中,Observer模式通过`java.util.Observable`和`java....
Observer(观察者)模式是设计模式中的一种,常用于实现对象之间的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在这个场景中,我们将讨论如何在Java中应用Observer模式,特别...
设计模式之Observer 设计模式之Chain of Responsibility(职责链) 设计模式之Command 设计模式之State 设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor
1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立性模式介绍 4、单态创立性模式介绍 5、单态创立性模式介绍 6、观察者模式介绍7、责任链模式 8、设计模式之Observer 9、...
设计模式之Observer 设计模式之Chain of Responsibility(职责链) 设计模式之Command 设计模式之State 设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor
Observer设计模式,也被称为“发布-订阅”(Publish-Subscribe)模式或“依赖倒置”模式,是软件设计中的一种行为模式。它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到...
本文实例讲述了C#设计模式之Observer观察者模式解决牛顿童鞋成绩问题。分享给大家供大家参考,具体如下: 一.理论定义 观察者模式 描述了 一种 一对多的关系。 当某一对象的状态发生改变时,其他对象会得到 改变的...
设计模式之 Observer(观察者) 介绍如何使用 Java API 提供的现成 Observer 设计模式之 Iterator(迭代器) 这个模式已经被整合入Java的Collection.在大多数场合下无需自己制造一个Iterator,只要将对象装入...
观察者模式(Observer)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在C++中广泛应用,特别是在需要...
观察者模式,也被称为发布-订阅模式或事件驱动模式,是软件设计模式中的一种行为模式。这个模式的主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并...
观察者模式(Observer)是软件设计模式中的一种行为模式,其主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式广泛应用于事件驱动...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在软件开发中广泛应用于事件驱动...
### 从Java类库看设计模式之Observer模式详解 #### 一、引言 在软件开发过程中,常常遇到需要在不同对象之间建立依赖关系的情况,其中一个对象的状态变化会影响到另一个对象的行为。这种需求可以用设计模式中的...
**C#面向对象设计模式纵横谈(19)**:**观察者模式**(Observer Pattern)是行为型模式的一种,它在软件工程中扮演着至关重要的角色。观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态...
观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在Java和C++等面向对象编程语言中,这种模式广泛用于事件处理和实时系统,...
在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...
本篇文章将深入探讨“Observer”观察者模式,这是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心概念是主题...