设计模式 行为型模式 -- 观察者模式 JDK中提供的实现:Observabie类

Posted CodeJiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式 行为型模式 -- 观察者模式 JDK中提供的实现:Observabie类相关的知识,希望对你有一定的参考价值。

设计模式 行为型模式 – 观察者模式(发布-订阅(Publish/Subscribe)模式)

1. Observabie类

Observable 类是抽象目标类(被观察者),它有一个 Vector 集合成员变量,用于保存所有要通知的观察者对象,下面来介绍它最重要的 3 个方法。

  • void addObserver(Observer o) 方法:用于将新的观察者对象添加到集合中。
  • void notifyObservers(Object arg) 方法:调用集合中的所有观察者对象的 update方法,通知它们数据发生改变。通常越晚加入集合的观察者越先得到通知。
  • void setChange() 方法:用来设置一个 boolean 类型的内部标志,注明目标对象发生了变化。当它为true时,notifyObservers() 才会通知观察者。

2. Observer 接口

Observer 接口是抽象观察者,它监视目标对象的变化,当目标对象发生变化时,观察者得到通知,并调用 update 方法,进行相应的工作。


3. 【例】警察抓小偷

警察抓小偷也可以使用观察者模式来实现,警察是观察者,小偷是被观察者。代码如下:

小偷是一个被观察者,所以需要继承Observable类

package com.tian.observer;

import java.util.Observable;

public class Thief extends Observable {
    private String name;

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

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void steal() {
        System.out.println("小偷:我偷东西了,有没有人来抓我!!!");
        super.setChanged(); //changed = true
        super.notifyObservers();
    }
}

警察是一个观察者,所以需要让其实现Observer接口

package com.tian.observer;

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

public class Policemen implements Observer {
    private String name;

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

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public void update(Observable o, Object arg) {
        System.out.println("警察:" + ((Thief) o).getName() + ",我已经盯你很久了,你可以保持沉默,但你所说的将成为呈堂证供!!!");
    }
}

客户端代码:测试类

package com.tian.observer;


public class Client {
    public static void main(String[] args) {
        //创建小偷对象
        Thief t = new Thief("隔壁老王");
        //创建警察对象
        Policemen p = new Policemen("小李");
        //让警察盯着小偷
        t.addObserver(p);
        //小偷偷东西
        t.steal();
    }
}

运行结果:



以上是关于设计模式 行为型模式 -- 观察者模式 JDK中提供的实现:Observabie类的主要内容,如果未能解决你的问题,请参考以下文章

设计模式 行为型模式 -- 观察者模式(发布-订阅(Publish/Subscribe)模式)

设计模式----行为型模式之观察者模式(Observer Pattern)

设计模式之行为型模式

手撸golang 行为型设计模式 观察者模式

设计模式-行为型模式-观察者模式

行为型设计模式 - 观察者模式详解