美文网首页
设计模式---观察者模式

设计模式---观察者模式

作者: 悠然望剑 | 来源:发表于2018-09-04 15:24 被阅读0次

观察者模式使用场景

业务场景中,经常会有这样一种情况,某个对象状态改变时,另外一组(与之相关的)对象也要发生改变。观察者模式就是用来解决这种问题的。

JDK对观察者模式的支持

由于观察者模式是如此常用,以至于JDK直接提供类支持,它们是在java.util包下的ObservableObserver。

具体应用

Observable类表示被观察的对象,它负责记住当自己发生变化时需要通知哪些类。当它状态发生变化时,它就通知那些观察者类,“OK,你们(指观察者)可以根据需要更新你们自己了”。Observable通过notifyObservers()方法通知列表上的每个观察者。

Observer表示观察者,它只是一个接口,这个接口只有一个方法update()。当被观察者通知所有观察者更新的时候,它就会调用update()方法更新自己。

观察者模式的实质

观察者模式是典型的将变化的东西从不变的东西中分离出来的设计模式。实际上,观察者模式应用的场景中,真正变化的有两样东西:观察者的数量和它们更新自己的方式。观察者模式使得你在不必改动其他代码的情况下,只针对这两种变化更改代码。

实际场景举例

在中国古代,对敌人进行监视是很常见的,监视者俗称“探子”,这里就这个场景进行模拟。

/**

*  Spy类,即“探子”,在这里是观察者,它只要发现被观察者状态发生变化,就会向主人汇报

*/

class Spy implements Observer{

    // 探子名

    private String name;

    public Spy(String name){

        this.name = name;

    }

    public void update(Observable o, Object arg){

        System.out.println(name + "报告主人,敌方正在" + arg);

    }

}

/**

*  敌人类,被观察者,当它状态改变时,会通知观察者更新自己的状态

*/

class Enemy extends Observable{

    // 敌人的动向

    private String action = "";

    // 敌人动向改变

    public void changeAction(String action){

        this.action = action;

        notifyObservers(action);

    }

    @Override

    public  void notifyObservers(Object arg){

        // 状态标志位,表示状态更新

        setChanged();

        super.notifyObservers(arg);

    }

}

public class Client{

    public static void main(String[] args){

        Enemy enemy = new Enemy();

        Spy spy1 = new Spy("一号探子");

        Spy spy2 = new Spy("二号探子");

        Spy spy3 = new Spy("三号探子");

        enemy.addObserver(spy1);

         enemy.addObserver(spy2);

         enemy.addObserver(spy3);

        enemy.changeAction("急速行军");

        enemy.changeAction("安营扎寨");

    }

}

输出结果:

相关文章

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 设计模式02-观察者者设计模式

    [toc] 设计模式02-观察者者设计模式 主要来源Head First设计模式(书)观察者设计模式是JDK中使用...

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • RxJava设计模式与原理

    标准观察者设计模式 RxJava是一种特殊的观察者模式,首先我们先来看标准的观察者设计模式。在标准观察者模式中,存...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • Guava源码分析——EventBus

    EventBus的设计理念是基于观察者模式的,可以参考设计模式(1)—观察者模式先来了解该设计模式。 1、程序示例...

  • 设计模式之观察者模式

    设计模式之观察者模式 本篇是设计模式系列博客的第四篇,本篇主要学习设计模式中的第二个行为型模式---观察者模式。 ...

  • PHP设计模式之观察者模式

    PHP设计模式之观察者模式

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

网友评论

      本文标题:设计模式---观察者模式

      本文链接:https://www.haomeiwen.com/subject/lfbgwftx.html