`
wbchen1983
  • 浏览: 10417 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JDK的观察者模式

阅读更多

1. JDK中实现观察者模式通过Observale类(顾名思义可以被观察)与Observer接口(观察者),被观察者继承Observale类,观察者实现Observer接口,类图如下:

2.Observale类是线程安全的,通过Vector存储所有的观察者。同步方法实现观察者的添加、删除、被观察者的状态改变。
如:
public synchronized void addObserver(Observer o) {
if (o == null)
throw new NullPointerException();
if (!obs.contains(o)) {   //调用Vector 的contains方法判断是否包含某个Observer对象,当且仅当 equals 方法为两个观察者返回 true 时
obs.addElement(o);
}
}
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);  //通知多个观察者,执行观察方法。
} 

3.代码示例,假设论坛在发表帖子后,需要给订阅帖子用户发送链接。
提交帖子:
package design;
import java.util.Observable;
public class Topic extends Observable {
    public String submitTopic(String topic){
        this.setChanged();//开启观察
        this.notifyObservers(topic);//通知观察者
        System.out.println("提交帖子:"+topic);
        return topic == null ? "null":topic;
    }
}
观察者发送邮件:
package design;
import java.util.Observable;
import java.util.Observer;
public class TopicObserver implements Observer {
@Override
public void update(Observable o, Object arg) {
submitTopicLog(arg.toString());
}
public void submitTopicLog(String str){
System.out.println("发送邮件:"+str);
}
} 
调用:
package design;
public class forkObserver {
    public static void main(String[] args) {
        Topic t = new Topic();
        TopicObserver to = new TopicObserver();
        t.addObserver(to);   //注册观察者
        System.out.println(t.countObservers());
        t.submitTopic("hello, every one!!!");
    }
}
4.系统中可能需要在方法执行前、执行后进行跟踪反馈,
  • 大小: 10.2 KB
分享到:
评论

相关推荐

    观察者模式详解(JDK中最重要的模式)

    ### 观察者模式详解(JDK中最重要的模式) #### 概述 观察者模式是一种设计模式,它定义了一种一对多的关系,使得多个观察者对象可以同时监听某个主题对象。当主题对象的状态发生变化时,它会通知所有的观察者对象...

    设计模式之观察者模式Java实现

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...

    Java观察者模式代码

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于事件驱动的系统或者需要...

    Java设计模式-第22章-观察者模式.ppt

    **JDK对观察者模式的支持** Java标准库提供了`java.util.Observable`和`java.util.Observer`两个类来支持观察者模式。`Observable`类代表观察目标,`Observer`接口代表观察者。用户可以通过继承`Observable`类来创建...

    监听者模式练习(包括jdk api的实现和自定义实现)

    首先,我们要理解JDK API中的观察者模式实现。`java.util.Observable`类代表可被观察的对象,它可以有多个观察者。而`java.util.Observer`接口则定义了观察者的接口,每个观察者都需要实现这个接口以定义其更新行为...

    java 观察者模式 (Observe)

    观察者模式在Java中占有重要地位,尤其体现在JDK对它的内置支持上。`java.util.Observable` 类和 `java.util.Observer` 接口提供了观察者模式的基础实现。任何继承自 `Observable` 的类都可以成为主题,而实现 `...

    jdk中设计模式

    15. **Observer(观察者模式)**:`java.util.Observer`和`Observable`,以及Swing中的监听器,当对象状态改变时通知其他对象。 16. **Mediator(中介者模式)**:如`Swing`的`ButtonGroup`,协调多个组件之间的...

    使用Java8实现观察者模式的方法(上)

    观察者模式是一种设计模式,它在软件开发中扮演着关键角色,特别是在构建响应式系统时。Java8引入了一些新特性,如lambda表达式和流API,这些特性使得实现观察者模式更加简洁和高效。本文将深入探讨如何利用Java8...

    java实验策略模式观察者模式和组合模式.doc

    【Java 实验:策略模式、观察者模式和组合模式】 实验目标主要集中在理解和应用三个设计模式:策略模式、观察者模式和组合模式。这三种模式是面向对象设计中常用且重要的设计模式,它们有助于提高代码的灵活性、可...

    详解Observer Pattern(观察者模式)在Java中的使用原理

    我们说学习Java应该从Swing开始,那么学习Swing最重要的思想就是对于观察者模式的理解(Observer Pattern)。因为,该设计模式在Java Swing框架中贯穿了始终。对于C#的委托、代理概念所使用的Callback(回调模式--...

    2 观察者模式-MOOC课程内容.pdf

    在Java语言中,JDK提供了对观察者模式的支持。java.util.Observer接口和java.util.Observable类是这一支持的体现。Observable类是Subject的基类,任何需要被观察的类都可以继承这个类。它提供了添加/删除Observer的...

    java观察者模式介绍

    Observer模式定义对象间的一对多的依赖关系,当一个对象(被观察者)的状态发生改变时, 所有依赖于它的对象(观察者)都得到通知并被自动更新。JDK里提供的observer设计模式的实现由java.util.Observable类和 java....

    java实验:策略模式、观察者模式和组合模式.doc

    【Java 实验:策略模式、观察者模式和组合模式】 实验目标主要集中在理解和应用三种设计模式:策略模式、观察者模式和组合模式。这三种模式是面向对象设计中常用且重要的设计模式,它们有助于提高代码的灵活性、可...

    专题资料(2021-2022年)java实验策略模式、观察者模式和组合模式.doc

    【Java 实验:策略模式、观察者模式与组合模式】 实验目标主要集中在三种设计模式的理解与应用上:策略模式、观察者模式以及组合模式。这些模式是面向对象设计中的核心概念,有助于创建灵活、可扩展的代码。 1. **...

    全面解析Java8观察者模式

    【全面解析Java8观察者模式】 观察者模式是一种行为设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在Java8中得到了很好的支持,尤其是...

    JDK中有关23个经典设计模式的示例

    13. 观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。`java.util.Observable`和`java.util.Observer`接口就是观察者模式的实现...

    设计模式实战、jdk源码|simple-demo.zip

    创建型模式(如单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式)、结构型模式(如适配器模式、装饰器...观察者模式、迭代器模式、访问者模式、命令模式、备忘录模式、状态模式、职责链模式、解释器模式)...

    jdk8源码包

    这种方法在设计模式如观察者模式中非常有用。通过源码,我们可以研究接口默认方法的实现机制以及它们在多继承中的处理策略。 对于Java 8的Optional类,它是用来解决null安全问题的一个工具类,源码解析可以帮助我们...

    jdk7 jdk-7u80-windows-x64 网盘下载

    4. **新的NIO.2 API**:增强了文件I/O操作的能力,支持文件观察者模式,简化了文件系统的访问。 5. **动态语言支持**:增加了对动态语言的支持,使得Java平台可以更好地支持如Groovy、Scala等动态语言。 6. **安全性...

Global site tag (gtag.js) - Google Analytics