1. 概述
观察者模式是一种常见的设计模式,又叫发布-订阅(Publish/Subscribe)模式。本文主要介绍下观察者模式的基本概念,然后给出Java实现此设计模式的一个demo供大家参考。
2. 什么是观察者模式
将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象之间的一致性,而我们不希望为了维持一致性而使得各类紧密耦合,这样会给维护、扩展和重用都带来不便。
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
观察者设计模式的关键对象是主题Subject和观察者Observer,一个Subject可以有任意数目的一拉它的Observer,一旦Subject的状态发送了改变,所有的Observer都可以得到通知,Subject发出通知时并不需要知道谁是它的观察者,也就是说,具体观察者是谁,它根本不关心,也不需要知道。而任何一个具体观察者不知道也不需要知道其他观察者的存在。
3. 观察者模式类图
(1)Subject类
Subject类把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。
(2)Observer类
Observer类即抽象观察者,为所有的具体观察者定义一个接口,在得到主题的通知时更新自己。
(3)ConcreteSubject类
ConcreteSubject类即具体主题,将有关状态存入具体观察者对象;在具体主题的内部状态发生改变时,给所有登记过的观察者发出通知。
(4)ConcreteObserver类
ConcreteObserver类即具体观察者,实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。
4. Java实现代码demo
(1)定义Subject类
package observer; import java.util.ArrayList; import java.util.List; public abstract class Subject { /** 观察者集合 */ private List<Observer> observers = new ArrayList<Observer>(); // 增加观察者 public void attach(Observer observer) { observers.add(observer); } // 移除观察者 public void detach(Observer observer) { observers.remove(observer); } // 通知观察者 public void notifyAllObservers() { for (Observer observer : observers) { observer.update(); } } }
(2)定义Observer类
package observer; public abstract class Observer { public abstract void update(); }
(3)定义ConcreteSubject类
package observer; public class ConcreteSubject extends Subject{ /**具体被观察者状态 */ private String subjectState; public String getSubjectState() { return subjectState; } public void setSubjectState(String subjectState) { this.subjectState = subjectState; } }
(4)定义ConcreteObserver类
package observer; public class ConcreteObserver extends Observer { /** 观察者名称 */ private String name; /** 观察者状态 */ private String observerState; /** 订阅主题 */ private ConcreteSubject subject; public ConcreteObserver(Subject subject, String name) { this.subject = (ConcreteSubject) subject; this.name = name; } @Override public void update() { observerState = subject.getSubjectState(); System.out.println(String.format("观察者%s的最新状态是%s", name, observerState)); } }
(5)客户端测试代码
package observer; public class Test { public static void main(String[] args) { ConcreteSubject s = new ConcreteSubject(); s.attach(new ConcreteObserver(s,"X")); s.attach(new ConcreteObserver(s,"Y")); s.attach(new ConcreteObserver(s,"Z")); s.setSubjectState("ABC"); s.notifyAllObservers(); } }
测试结果
观察者X的最新状态是ABC 观察者Y的最新状态是ABC 观察者Z的最新状态是ABC
相关推荐
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在Java中,我们可以利用Java提供的...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或者发布...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
总的来说,Java中的观察者模式是一种灵活且强大的设计模式,它促进了松耦合,使得系统能够根据需求动态地增加或减少观察者,提高了代码的可维护性和可扩展性。在开发过程中,正确地使用观察者模式可以帮助我们创建出...
在《设计模式实现——观察者模式》这篇博客中,作者可能详细解释了观察者模式的概念、结构以及其在实际编程中的应用。以下是对观察者模式的详细阐述: 1. **模式定义**:观察者模式是一种对象行为型模式,它允许...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它允许一个对象,当其状态发生改变时,能够自动通知所有依赖它的其他对象。在Java中,这种模式已经被内置到语言核心,使得开发者可以轻松地实现事件驱动...
观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被...
在Java中,观察者模式通常通过`java.util.Observable`和`java.util.Observer`这两个接口来实现。`Observable`类代表被观察的对象,它可以添加多个观察者,并在状态变化时通知它们。而`Observer`接口则定义了观察者的...
观察者模式是软件设计模式中的一种行为...总的来说,"java观察者模式Demo"提供了一个使用Java标准库实现观察者模式的例子,这对于学习和理解设计模式是非常有帮助的,同时通过自定义实现还能进一步深入理解其工作原理。
在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...
总结来说,这个"java观察者模式实例"帮助我们理解如何在实际项目中应用观察者模式,以及如何利用Java的`Observable`和`Observer`接口来实现。通过这个实例,我们可以更好地掌握Java的继承和多态特性,提升软件设计的...
以下是关于Java版本设计模式实现demo的一些补充说明: 1. 设计模式分类 设计模式通常分为三大类:创建型模式、结构型模式和行为型模式。创建型模式关注对象的创建;结构型模式关注类或对象的组合;行为型模式则关注类或...
Java代码积累:并发 设计模式 数据结构 使用容器 实用 类 基础知识 并发性 演示线程的生命周期 生产者-消费者 设计模式参考《大话设计模式》 工厂简单模式 创造型模式 工厂方法模式 抽象工厂模式 原型模式 建造者...
Java中的监听机制与观察者设计模式是编程中重要的概念,它们在软件开发中扮演着关键的角色,尤其是在构建可扩展和可维护的系统时。这里,我们将深入探讨这两个主题,并通过实例来阐述它们的工作原理和应用。 首先,...
**观察者模式(Observer Pattern)**是软件设计模式中的一种行为模式,它在Java中有着广泛的应用。这个模式的核心思想是“一对多”的依赖关系,即一个主题对象(Subject)可以被多个观察者(Observer)关注,当主题...
观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计模式中的行为模式之一,主要用于对象间的一对多依赖关系管理。在Java中,观察者模式的实现主要依赖于`java.util.Observable`和`java.util....
在Java编程领域,设计模式是一种被广泛采用的最佳实践,它为解决常见的软件设计问题提供...在Java中,`java.util.Observable`和`java.util.Observer`是内置的观察者模式实现,可以方便地用于快速构建观察者模式的系统。
### Java观察者模式详解 #### 一、观察者模式概述 观察者模式是一种常用的设计模式,主要用于处理对象间的一对多依赖关系。当一个对象(主题)的状态发生变化时,所有依赖于它的对象(观察者)都会收到通知并自动...