Java中的观察者模式

Observer接口

这个接口定义了一个update()方法,当被观察者对象的状态发生变化时,这个方法就会被调用。这个方法的实现类应当调用每一个被观察者对象的notifyObservers()方法,从而通知所有的观察对象。

Observable类

被观察者类都是java.util.Observable类的子类。

这个类主要提供下面几个方法:

setChanged() - 被调用之后会设置一个内部标记变量,代表被观察者对象的状态发生了变化。

notifyObservers() - 被调用时,会调用所有登记过的观察者对象的update()方法,使这些观察者对象可以更新自己。

addObserver() - 添加观察者对象。

例子

事件被观察者

import java.util.Observable;

public class EventObservable extends Observable {
    private String name = null;

    public EventObservable(String name) {
        this.name = name;
    }

    public void doSomeChanges() {
        this.setChanged();
        this.notifyObservers(System.currentTimeMillis());
    }

    @Override
    public String toString() {
        return this.name;
    }
}

事件观察者

import java.util.Observable;
import java.util.Observer;

public class EventObserver implements Observer {
    private String name = null;

    public EventObserver(String name) {
        this.name = name;
    }

    @Override
    public void update(Observable o, Object arg) {
        EventObservable eventObservable = (EventObservable) o;
        System.out.printf("%s, %s, %s \n", this.name, eventObservable, arg);
    }

    @Override
    public String toString() {
        return this.name;
    }
}

测试



public class Test {
    public static void main(String[] args) throws Exception {
        EventObservable eventObservable = new EventObservable("My Event Observer");
        eventObservable.addObserver(new EventObserver("Event Observer 1"));
        eventObservable.addObserver(new EventObserver("Event Observer 2"));
        eventObservable.doSomeChanges();
        eventObservable.doSomeChanges();
        eventObservable.doSomeChanges();
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-12 03:45:33

Java中的观察者模式的相关文章

单片机中应用观察者模式

?? 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN8 开发环境:MDK5.13 mcu: stm32f103RB 说明: 之前在java中应用观察者模式,现将此模式的思想应用在单片机程序设计中 Android编程:观察者模式设计: http://blog.csdn.net/jdh99/article/details/41821295 观察者模式本质: 有两个模块A,B.A是目标,B是观察者.则B能观察到A的变化. 在程序实现

java中观察者模式Observable和Observer

25.java中观察者模式Observable和Observer 如果想要实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口 观察者设计模式 现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房者都可以观察得到. 实际上以上的购房者就是观察者,他们所关注的房价就是被观察者 其中要求,被观察者需要继承Observable类,观察则需要实现Observer接口 具体实现如下 房价的实现 1 class House extends

java设计模式之观察者模式以及在java中作用

观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependents)模式. 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 推模型和拉模型 在观察者模式中,又分为推模型和拉模型两种方式. ● 推模型 主题对象向观察者推送主题的详细信息,不管观察者是否需

Java中使用Observer接口和Observable类实践Observer观察者模式

在Java中通过Observable类和Observer接口实现了观察者模式.实现Observer接口的对象是观察者,继承Observable的对象是被观察者. 1. 实现观察者模式 实现观察者模式非常简单, [1]创建被观察者类,它继承自java.util.Observable类: [2]创建观察者类,它实现java.util.Observer接口: [3]对于被观察者类, 添加它的观察者: void addObserver(Observer o) addObserver()方法把观察者对象添

Java中的设计模式(七):观察者模式

介绍 观察者模式是行为设计模式之一.当您对对象的状态感兴趣并希望在有任何更改时收到通知时,观察者设计模式非常有用.在观察者模式中,监视另一个对象状态的对象称为Observer,正在被监视的对象称为Subject. 根据GoF,观察者设计模式的意图是; 定义对象之间的一对多依赖关系,以便当一个对象更改状态时,将自动通知和更新其所有依赖项. Subject包含一个观察者列表,用于通知其状态的任何变化,因此它应该提供观察者可以注册和注销自己的方法.Subject还包含一种方法,用于通知所有观察者任何更

java中jna使用回调实现事件监听器——观察者模式

(1)C接口中的接口头文件 #pragma once #include <iostream> #include <vector> #include <core/core.hpp> #include <highgui/highgui.hpp> #include <imgproc/imgproc.hpp> #ifdef VIDEOPOSITION_EXPORTS #define VIDEOPOSITION_API __declspec(dllexpo

Java中常见设计模式面试

一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种: 策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1.请列举出在JDK中几个常用的设计模式? 单例模式用于Runtime, Calendar和其他的一些类中.工厂模式被

Java设计模式之观察者模式

综述 观察者模式(Observer Pattern)也叫做发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.这个模式的一个最重要的作用就是解耦.也就是将被观察者和观察者进行解耦,使得他们之间的依赖性更小,甚至做到毫无依赖.在观察者模式中它定义了一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新.下面就来看一下观察者模式的具体实现. 观察者模式实现 在这里我们假定一个场景,在一个图书管理系统中,现在有这么一个需求

[设计模式](转)Java中的24种设计模式与7大原则

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; text-decoration: none; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: poin