我们这里简单用代码描述如下:
- package observer.desc;
- /**
- *
- *作者:alaric
- *时间:2013-8-13下午8:05:08
- *描述:抽象观察者
- */
- public interface Observer {
- public void update();
- }
- package observer.desc;
- /**
- *
- *作者:alaric
- *时间:2013-8-13下午8:05:34
- *描述:具体观察者
- */
- public class ConcreteObserver implements Observer{
- @Override
- public void update() {
- // 写业务逻辑
- }
- }
- package observer.desc;
- /**
- *
- *作者:alaric
- *时间:2013-8-13下午8:05:55
- *描述:抽象主题
- */
- public interface Subject {
- public void attach(Observer observer);
- public void detach(Observer observer);
- void notifyObservers();
- }
- package observer.desc;
- import java.util.Enumeration;
- import java.util.Vector;
- /**
- *
- *作者:alaric
- *时间:2013-8-13下午8:09:21
- *描述:具体主题类
- */
- public class ConcreteSubject implements Subject {
- private Vector<Observer>observersVector = new Vector<Observer>();
- public void attach(Observer observer) {
- observersVector.addElement(observer);
- }
- public void detach(Observer observer) {
- observersVector.removeElement(observer);
- }
- public void notifyObservers() {
- Enumeration<Observer>enumeration = observers();
- while (enumeration.hasMoreElements()) {
- ((Observer) enumeration.nextElement()).update();
- }
- }
- @SuppressWarnings("unchecked")
- public Enumeration<Observer> observers() {
- return ((Vector<Observer>) observersVector.clone()).elements();
- }
- }
jdk1.6中API文档如下描述:
public interface Observer
一个可在观察者要得到 observable 对象更改通知时可实现 Observer 接口的类。
从以下版本开始:
JDK1.0
另请参见:
Observable
public class Observableextends Object
此类表示模型视图范例中的 observable 对象,或者说“数据”。可将其子类化,表示应用程序想要观察的对象。
一个 observable 对象可以有一个或多个观察者。观察者可以是实现了 Observer 接口的任意对象。一个 observable 实例改变后,调用 Observable 的 notifyObservers 方法的应用程序会通过调用观察者的 update 方法来通知观察者该实例发生了改变。
未指定发送通知的顺序。Observable 类中所提供的默认实现将按照其注册的重要性顺序来通知 Observers,但是子类可能改变此顺序,从而使用非固定顺序在单独的线程上发送通知,或者也可能保证其子类遵从其所选择的顺序。
注意,此通知机制与线程无关,并且与 Object 类的 wait 和 notify 机制完全独立。 新创建一个 observable 对象时,其观察者集是空的。当且仅当 equals 方法为两个观察者返回 true 时,才认为它们是相同的。
从以下版本开始:
JDK1.0
另请参见:
notifyObservers(), notifyObservers(java.lang.Object), Observer, Observer.update(java.util.Observable, java.lang.Object)
- package observer;
- import java.util.List;
- import java.util.Observable;
- import java.util.Observer;
- /**
- *
- *作者:alaric
- *时间:2013-8-13下午9:32:40
- *描述:警察张三
- */
- public class Police extends Observable {
- private String time ;
- public Police(List<Observer> list) {
- super();
- for (Observer o:list) {
- addObserver(o);
- }
- }
- public void change(String time){
- this.time = time;
- setChanged();
- notifyObservers(this.time);
- }
- }
- package observer;
- import java.util.Observable;
- import java.util.Observer;
- /**
- *
- *作者:alaric
- *时间:2013-8-13下午9:32:59
- *描述:卧底A
- */
- public class UndercoverA implements Observer {
- private String time;
- @Override
- public void update(Observable o, Object arg) {
- time = (String) arg;
- System.out.println("卧底A接到消息,行动时间为:"+time);
- }
- }
- package observer;
- import java.util.Observable;
- import java.util.Observer;
- /**
- *
- *作者:alaric
- *时间:2013-8-13下午9:33:14
- *描述:卧底B
- */
- public class UndercoverB implements Observer {
- private String time;
- @Override
- public void update(Observable o, Object arg) {
- time = (String) arg;
- System.out.println("卧底B接到消息,行动时间为:"+time);
- }
- }
- package observer;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Observer;
- /**
- *
- *作者:alaric
- *时间:2013-8-13下午9:32:26
- *描述:测试
- */
- public class Client {
- /**
- * @param args
- */
- public static void main(String[] args) {
- UndercoverA o1 = new UndercoverA();
- UndercoverB o2 = new UndercoverB();
- List<Observer> list = new ArrayList<>();
- list.add(o1);
- list.add(o2);
- Police subject = new Police(list);
- subject.change("02:25");
- System.out.println("===========由于消息败露,行动时间提前=========");
- subject.change("01:05");
- }
- }
测试运行结果:
卧底B接到消息,行动时间为:02:25
卧底A接到消息,行动时间为:02:25
===========由于消息败露,行动时间提前=========
卧底B接到消息,行动时间为:01:05
卧底A接到消息,行动时间为:01:05
相关推荐
观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象事件发生时通知多个“观察”该对象的其他对象。这个模式的核心在于建立一种一对多的关系,当一个对象的状态改变时,所有依赖于它的对象都会得到...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现发布-订阅...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或者发布...
本篇文章将深入探讨Qt中的观察者模式(Observer Pattern),这是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心...
观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被...
观察者模式,也被称为发布-订阅模式,是软件设计中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在分布式系统、事件驱动...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它允许一个对象,当其状态发生改变时,能够自动通知所有依赖它的其他对象。在Java中,这种模式已经被内置到语言核心,使得开发者可以轻松地实现事件驱动...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...
观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计中的一种行为模式。在iOS开发中,它是一种让多个对象监听或订阅某一个主题对象的状态变化,并在状态变化时自动收到通知的方式。这种模式使得...
观察者模式详解 观察者模式(Observer Design Pattern)是行为型设计模式的一种,主要解决的是“类或对象之间的交互”问题。它定义了一个一对多的依赖关系,当一个对象的状态改变时,所有依赖的对象都会自动收到...
观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在这个"股票分析程序"中,我们很显然看到它利用了这种模式来实时更新股票...
观察者模式是面向对象设计中的一种经典模式,它在软件工程中扮演着重要的角色,用于实现对象间的松耦合。这种模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于事件驱动的系统或者实时...
观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在Java或其他面向对象语言中,这种模式通常用于实现事件处理或发布/订阅系统。在给定的“观察者...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
### Unity3D设计模式之观察者模式 #### 观察者模式概述 观察者模式(Observer Pattern)是一种软件设计模式,属于行为型模式之一。它定义了对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它...
### 观察者模式概述与应用 #### 一、观察者模式定义 观察者模式是一种常用的软件设计模式,主要用于处理对象间的依赖关系。在这种模式下,一个对象(称为“主题”或“被观察者”)负责维护一组依赖于它的对象...