Java设计模式探究之观察者模式详解

目录
  • 1.观察者模式是什么
  • 2.如何实现
  • 3.代码实现
    • 1)观察者接口
    • 2)被观察者接口
    • 3)观察者实现
    • 4)被观察者实现
    • 5)测试类
  • 4.延伸拓展

1.观察者模式是什么

顾名思义,有两个对象,观察者和被观察者。当被观察者数据发生变化时,提醒观察者更新数据或状态。

2.如何实现

1)定义两个类,观察者和被观察者。

2)被观察者要维护一个集合,存放观察者对象。并且提供增删方法。

3)被观察者数据发生变化时,要调用观察者的方法,以便通知观察者更新数据或状态。

4)基于面向抽象原则,可以将观察者和被观察者中的方法提取接口中。

3.代码实现

1)观察者接口

/**
 * 抽象观察者接口
 */
public interface Observer {
    /**
     * 抽象方法
     */
    public void uPdate();
    public void remove();
}

2)被观察者接口

/**
 * 抽象被观察者
 */
public interface Observed {
    public void addObserver(Observer observer);
    public void deleteObserver(Observer observer);
    public void notifyObservers();
}

3)观察者实现

/**
 * 观察者实现
 */
public class ObserverImpl implements Observer {
    public ObserverImpl(){
    }
    @Override
    public void uPdate() {
        System.out.println("update....");
    }
}

4)被观察者实现

/**
 * 观察者实现
 */
public class ObserverImpl implements Observer {
    public ObserverImpl(){
    }
    private Observed observed;
    public ObserverImpl(Observed observed){
        this.observed = observed;
        observed.addObserver(this);
    }
    @Override
    public void uPdate() {
        System.out.println("观察者更新数据变化....");
    }
    @Override
    public void remove() {
        if(observed!=null){
            observed.deleteObserver(this);
        }
    }
}

5)测试类

public class TestObserver {
    public static void main(String args []){
        ObservedImpl subject = new ObservedImpl();
        ObserverImpl observer1 =  new ObserverImpl(subject);
        subject.notifyObservers();
    }
}

4.延伸拓展

在Android的代码中,有很多地方用到了观察者模式。

Android的广播机制,就是采用的观察者模式。

我们创建一个广播接收者,来接收系统广播。在Android源码中,其实就维护了一个接收者的集合,用于存放所有的广播接收者。

到此这篇关于Java设计模式探究之观察者模式详解的文章就介绍到这了,更多相关Java观察者模式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java通俗易懂系列设计模式之观察者模式

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

  • Java设计模式之java观察者模式详解

    目录 引言 介绍 角色 原理类图 微信订阅号的案例 总结 优点 缺点 适用场景 观察者模式的典型应用 JDK 提供的观察者接口 Guava EventBus 中的观察者模式 Spring ApplicationContext 事件机制中的观察者模式 参考文章 总结 引言 观察者模式是设计模式中的 "超级模式",其应用随处可见,我们以微信公众号为例. 微信公众号有服务号.订阅号和企业号之分.当我们在公众号上发布一篇博文推送时,订阅的用户都能够在我发布推送之后及时接收到推送,即可方便地在手

  • Java中常用的设计模式之观察者模式详解

    目录 优点 缺点 使用场景 注意事项 一.实现方式 1.观察者抽象类 2.第一个观察者 3.第二个观察者 4.第三个观察者 5.定义主题 二.测试 总结 优点 1.观察者和被观察者是抽象耦合的. 2.建立一套触发机制. 缺点 1.如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间. 2.如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃. 3.观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而

  • Java设计模式—观察者模式详解

    观察者模式 包括这个模式在内的接下来的四个模式,都是类和类之间的关系,不涉及到继承,学的时候应该 记得归纳,记得本文最开始的那个图.观察者模式很好理解,类似于邮件订阅和RSS订阅,当我们浏览一些博客或wiki时,经常会看到RSS图标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你.其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系. 先来看看关系图: 我解释下这些类的作用:MySubject类就是我们的主对象,Obs

  • Java设计模式之观察者模式(Observer模式)

    一.观察者模式是什么? 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern).当一个对象被修改时,则会自动通知依赖它的对象.观察者模式属于行为型模式. 人话: 就像微信公众号推送消息,订阅的人能收到,没订阅的收不到,还可以取消/添加订阅 二.模式分析 2.1 四个角色 抽象主题(抽象被观察者角色):也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者.抽象主题提供一个接口,可以增加和删除观察者角色.一般用一个抽象类和接口来实现

  • 深入理解Java设计模式之观察者模式

    目录 一.什么是观察者模式 二.观察者模式的结构 三.观察者模式的使用场景 使用观察者模式也有两个重点问题要解决: 广播链的问题. 异步处理问题. 四.观察者模式的优缺点 五.观察者模式的实现 六.观察者模式和委托的结合 七.总结 一.什么是观察者模式 在许多设计中,经常涉及多个对象都对一个特殊对象中的数据变化感兴趣,而且这多个对象都希望跟踪那个特殊对象中的数据变化,也就是说当对象间存在一对多关系时,在这样的情况下就可以使用观察者模式.当一个对象被修改时,则会自动通知它的依赖对象. 观察者模式是

  • Java设计模式之观察者模式原理与用法详解

    本文实例讲述了Java设计模式之观察者模式原理与用法.分享给大家供大家参考,具体如下: 什么是观察者模式 可以这么理解: 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象. 这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己. 也可以这样理解: 观察者模式是关于多个对象想知道一个对象中数据变化情况的一种成熟模式.观察者模式中有一个称作"主题"的对象和若干个称作"观察者"的对象,"主题"和&qu

  • Java设计模式探究之观察者模式详解

    目录 1.观察者模式是什么 2.如何实现 3.代码实现 1)观察者接口 2)被观察者接口 3)观察者实现 4)被观察者实现 5)测试类 4.延伸拓展 1.观察者模式是什么 顾名思义,有两个对象,观察者和被观察者.当被观察者数据发生变化时,提醒观察者更新数据或状态. 2.如何实现 1)定义两个类,观察者和被观察者. 2)被观察者要维护一个集合,存放观察者对象.并且提供增删方法. 3)被观察者数据发生变化时,要调用观察者的方法,以便通知观察者更新数据或状态. 4)基于面向抽象原则,可以将观察者和被观

  • java 设计模式之适配器模式的详解

    java 设计模式之适配器模式的详解 前言: 适配器模式(Adapter Pattern)又叫做变压器模式,也叫做包装模式.包装模式还包括装饰模式. 在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的. 一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中. UML类图:  具体代码: public class Client { public static void main(String[] args)

  • Java设计模式之命令模式详解

    命令模式 定义:将请求封装成对象,这可以让你使用不同的请求.队列.或者日志来参数化其他对象. 何时使用命令模式?当需要将发出请求的对象和执行请求的对象解耦的时候,使用命令模式. 在被解耦的两者之间是通过命令对象进行沟通的.命令对象封装了接收者和一个或一组动作. 调用者通过调用命令对象的execute()方法发出请求,这会使接收者的动作被调用. 调用者可以接收命令当作参数,甚至在运行时动态地进行. 优点: 1.降低了系统耦合度. 2.新的命令可以很容易添加到系统中去. 缺点:使用命令模式可能会导致

  • Java设计模式之原型模式详解

    一.前言 原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式.在实际应用中,原型模式很少单独出现.经常与其他模式混用,他的原型类Prototype也常用抽象类来替代. 该模式的思想就是将一个对象作为原型,对其进行复制.克隆,产生一个和原对象类似的新对象.在Java中,复制对象是通过clone()实现的,先创建一个原型类,通过实现Cloneable 接口 public class Prototype implements Cloneable { public

  • Java设计模式之代理模式详解

    一.代理模式 代理模式就是有一个张三,别人都没有办法找到他,只有他的秘书可以找到他.那其他人想和张三交互,只能通过他的秘书来进行转达交互.这个秘书就是代理者,他代理张三. 再看看另一个例子:卖房子 卖房子的步骤: 1.找买家 2.谈价钱 3.签合同 4.和房产局签订一些乱七八糟转让协议 一般卖家只在签合同的时候可能出面一下,其他的1,2,4都由中介去做.那你问这样有什么用呢? 首先,一个中介可以代理多个卖房子的卖家,其次,我们可以在不修改卖家的代码的情况下,给他实现房子加价.打广告等等夹带私货的

  • Java设计模式之单例模式示例详解

    目录 0.概述 1.饿汉式 1.1 饿汉式单例实现 1.2 破坏单例的几种情况 1.3 预防单例的破坏 2.枚举饿汉式 2.1 枚举单例实现 2.2 破坏单例 3.懒汉式 4.双检锁懒汉式 5.内部类懒汉式 6.JDK中单例的体现 0.概述 为什么要使用单例模式? 在我们的系统中,有一些对象其实我们只需要一个,比如说:线程池.缓存.对话框.注册表.日志对象.充当打印机.显卡等设备驱动程序的对象.事实上,这一类对象只能有一个实例,如果制造出多个实例就可能会导致一些问题的产生,比如:程序的行为异常.

  • java设计模式之单例模式的详解及优点

    java设计模式之单例模式 定义:如果一个类始终只能创建一个实例,那么这个类被称为单例类,这种设计模式被称为单例模式. Spring框架里面可以将所有生成的bean对象都设置为单例模式,只需要在配置Bean实例时指定scope="singleton"即可,或者不做配置默认即为单例模式. 我们可以创建一个小的Demo来演示单例模式的实现,只需要保证该类只能创建一个实例,我们可以用权限修饰符private修饰该类的构造器. 提供一个创建该类的接口,该接口只能用static修饰,类里面创建一

  • Java设计模式之单例模式实例详解【懒汉式与饿汉式】

    本文实例讲述了Java设计模式之单例模式.分享给大家供大家参考,具体如下: 单例模式就是产生一个对象实例,供外外部访问. 它的应用场景就是在这个类在全局真资源需要统一访问,否则会造成混乱时,才有必要设计成单例. 懒汉式,就是在使用这个对象时,才去查看这个对象是否创建,如果没创建就马上创建,如果已经创建,就返回这个实例. 饿汉式,在加载这个类的时候就先创建好一个对象实例,等待调用. 两者的优缺点也能猜到,使用懒汉式,在反应速度上肯定要比饿汉式慢. 但是这个对象如果不被调用,那就节省了cpu和内存资

  • JAVA设计模式之访问者模式详解

    在阎宏博士的<JAVA与模式>一书中开头是这样描述访问者(Visitor)模式的: 访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变. 分派的概念 变量被声明时的类型叫做变量的静态类型(Static Type),有些人又把静态类型叫做明显类型(Apparent Type):而变量所引用的对象的真实类型又叫做变量的实际类型(Actual Type).比如: 复制代码 代码如下: List lis

  • java设计模式之工厂方法详解

    一.概念 工厂方法模式是类的创建模式,又叫虚拟构造子模式(virtual constructor) 或者多态性工厂模式. 二.模式动机 定义一个抽像的工厂,将产品的具体创建工作推迟到抽像工厂的具体子类中,有些产品的创建非常复杂,试想如果将所有具体产品的创建工作都像简单工厂一样放到一个静态工厂方法中,那么这个工厂方法将无比巨大,且当需要扩展增加新的产品时,就必须修改原先的工厂方法,违背了开-闭原则,而工厂方法模式,对于每个具体产品的创建都有一个具体的工厂来创建,如果新增产品,只需要新增一个实现抽像

随机推荐