`

JAVA设计模式之Observer模式

阅读更多

观察者模式,在开发中经常使用到。特别是在UI层,那么什么是观察者模式呢?观察者模式,有以下几个要点。

1、被观察者和观察者是一对多的关系,也就是同一个被观察者可以被多个观察者来观察。这样,在实现被观察者的时候,需要用一个集合的数据结构来存放所有观察该对象的观察者。

2、观察者要想观察被观察者,需要将自身注册给被观察者。

3、被观察者的属性发生变化的时候,需要通知所有注册了自己的观察者。

4、被观察者决定,哪些属性发生变化了,通知所有观察者。

java已经将Observer模式加入JDK中了,在java.util包下,分别有Observer接口和Observable类。所以,我们定义的观察者实现Observer接口就可以了,而被观察者继承Observable就可以了,在某属性变化的时候,使用setChanged(),和notifyObservers(args)就可以了。然后,在使用的时候,注册观察者,使用addObserver(Observer)就可以了。

观察者模式的组件结构如下:

自己

可以看到,Observer中只有一个update方法,这个方法就是,当被观察者的属性发生改变的时候,该方法会被调用。

在java的jdk中,还有另外一组模型,这组模型是基于事件处理的模式,包含EventListener标识接口,EventObject事件对象,下面我们看看使用这个模型来实现事件监听的组件结构,如下图:

tt

由于EventListener接口没有任何方法申明,我们继承该接口自定义一个接口SampleEventListener,其中包含一个处理事件的方法

SampleEvent继承了EventObject事件对象,该对象包含了一个对事件源(EventSource)的引用。EventSource中包含了一个Vector集合对象用来保存所有注册了的监听器对象。

这样,当事件源(EventSource)触发notifyListeners()方法时,Vector中所有Listener就会调用handleEvent(SampleEvent)方法,

然后在该方法中处理事件。这样,事件源经过事件的包装,成为事件的属性之一,然后传递给监听器来处理。这里我们可以看到,这里的监听器(Listener)就相当于Observer,而EventSource就相当于Observable。

对于Observer形式的观察者模式和Event的观察者模式,是相似又有区别的。

Observer中的Observable已经封装好了很多操作,而且,不分事件源和事件,将其合并成为一个Obsevable对象。

这两种方式都可以来实现观察者模式。

分享到:
评论

相关推荐

    java设计模式之Observer参考.pdf

    Observer模式,也称为发布-订阅(Publish/Subscribe)模式,是一种行为设计模式,它允许对象在状态发生改变时通知其他对象,而无需显示地指定这些对象。在Java中,Observer模式通过`java.util.Observable`和`java....

    java设计模式之Observer[整理].pdf

    在Java编程中,设计模式是一种经过实践验证的解决常见问题的模板,能够提高代码的可读性、可维护性和复用性。Observer(观察者)模式是设计模式中的一种,常用于实现对象之间的依赖关系,当一个对象的状态发生改变时...

    Java设计模式 设计模式介绍

    1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立性模式介绍 4、单态创立性模式介绍 5、单态创立性模式介绍 6、观察者模式介绍7、责任链模式 8、设计模式之Observer 9、...

    JAVA设计模式chm文档

    设计模式之Observer 设计模式之Chain of Responsibility(职责链) 设计模式之Command 设计模式之State 设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    Java设计模式是软件工程中的一种最佳实践,它总结了在特定场景下解决常见问题的经验,为程序员提供了可重用的解决方案。本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与...

    《Java设计模式》课后答案-刘伟.rar

    《Java设计模式》是刘伟教授的一本关于设计模式的教材,主要面向高等学校的学生和对Java编程有深入兴趣的开发者。设计模式是软件工程中的一种重要思想,它封装了在特定场景下的问题解决方案,可以提高代码的可读性、...

    java设计模式期末考试选择题100道

    适合Java设计模式期末考试选择题复习,形式如下: 10.(单选题)Facade(外观)模式的意图是 正确答案: A A.希望简化现有系统的使用方法,你需要定义自己的接口 B.将一个无法控制的现有对象与一个特定借口相匹配。 C....

    23种java设计模式.pdf

    " JAVA 设计模式概述" JAVA 设计模式是指在软件设计过程中,为了提高代码的可维护性、灵活性和可扩展性所使用的一些惯用解决方案。JAVA 设计模式可以分为三种:创建模式、结构模式和行为模式。 1. 创建模式 创建...

    设计模式之Observer

    在Java中,`java.util.Observable`类和`java.util.Observer`接口就是对Observer模式的一种实现。`Observable`类代表主题,`Observer`接口代表观察者。当我们创建一个`Observable`对象并添加`Observer`对象到其观察者...

    Java设计模式刘伟书本中模拟考试答案

    在《Java设计模式》这本书的模拟试题及其参考答案中,涉及了多条设计模式的知识点,以及它们的应用场景和实现方法。现在将这些知识点详细地解释如下: 1. 开闭原则(Open-Closed Principle, OCP): 开闭原则是面向...

    JAVA设计模式-chm版

    Java设计模式是软件开发中的一种最佳实践,它总结了在解决特定问题时程序员们经常采用的有效方法。这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的...

    JAVA设计模式之行为模式

    这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...

    JAVA设计模式(chm版)

    Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决问题的经验总结,可以被复用在各种不同的软件系统中。这个"JAVA设计模式(chm版)"是一个关于Java设计模式的电子书,采用CHM(Microsoft Compiled ...

    java设计模式.pdf

    Java设计模式是面向对象编程领域中的重要概念,它是一套被广泛接受并实践的解决软件设计问题的经验总结。设计模式并非具体的代码或库,而是一种描述在特定情况下,如何设计和实现软件组件的经典方法。这些模式是经过...

    Observer设计模式实例

    Observer设计模式,也被称为“发布-订阅”(Publish-Subscribe)模式或“依赖倒置”模式,是软件设计中的一种行为模式。它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到...

    java设计模式PPT

    Java设计模式是软件工程中的一种最佳实践,它是一种在特定情境下解决常见问题的经验总结。这份"java设计模式PPT"资源提供了系统化的学习材料,旨在帮助开发者提升编程思维,理解如何有效地组织代码,提高软件的可...

    Java 设计模式最佳实践

    Java 设计模式最佳实践是软件开发中的重要主题,它涵盖了多种模式,这些模式已被广泛接受并应用于实际项目中,以解决常见的编程问题和提升代码的可读性、可维护性和可扩展性。在这个主题中,我们将深入探讨一些关键...

    JAVA设计模式

    **JAVA设计模式** 在软件工程领域,设计模式是一种在特定情境下解决问题的可复用解决方案。它们是经验的总结,代表了在特定上下文中被广泛接受的、经过时间考验的最佳实践。Java设计模式是面向对象编程中的一种重要...

    java设计模式高清教程

    Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决问题的经验总结,可以提高代码的可重用性、灵活性和可维护性。本高清教程深入浅出地讲解了Java中的各种设计模式,对于提升开发者的技术能力和面试表现...

Global site tag (gtag.js) - Google Analytics