设计模式-观察者模式

1. 总述

介绍:
观察者模式是行为模式,是将一个对象与其其他对象进行关联,当对象发生改变时 通知关联对象发生状态改变,自动刷新状态。这个模式作用是一种同步通信的手段, 是对象与关联对象保持同步。
可以用于以下场景:

  • 侦听事件驱动程序设计中的外部事件
  • 侦听/监视某个对象的状态变化
  • 发布者/订阅者(publisher/subscriber)模型中,当一个外部事件(新的产品,消息的出现等等) 被触发时,通知邮件列表中的订阅者

2.代码

因为时间原因直接粘贴代码了,注释很清楚。
设计模式-观察者模式_第1张图片
1.测试类

package Jobserver;

import java.util.Observer;

/**
* 观察者模式:
* 

* 模式:行为模式 *

* 介绍: * 观察者模式是行为模式,是将一个对象与其其他对象进行关联,当对象发生改变时 * 通知关联对象发生状态改变,自动刷新状态。这个模式作用是一种同步通信的手段, * 是对象与雨来对象保持同步。 *

* 组成: * subject被观察对象: * 被观察的对象。当需要被观察的状态发生变化时, * 需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)一个观察者对象的队列列表 * concreateSubject 具体观察者: * Observer被观察者: * ConcreateObserver被观察者的具体实现: *

* 图示: * *

* 优缺点: *

* 案例: * 侦听事件驱动程序设计中的外部事件 * 侦听/监视某个对象的状态变化 * 发布者/订阅者(publisher/subscriber)模型中,当一个外部事件(新的产品,消息的出现等等) * 被触发时,通知邮件列表中的订阅者 */ public class MainClass { //使用jdk提供的工具类Observer,模拟发送订阅通知 public static void main(String[] args) { Pusher pusher = new Pusher(); //添加观察者 pusher.addObserver(new Accepter()); pusher.addObserver(new Accepter()); pusher.addObserver(new Accepter()); //发送最新推送消息 pusher.putNews(); } }

  1. 被观察者
package Jobserver;

import java.util.Observable;

/**
 * 信息推送者,(被观察者)
 */
public class Pusher extends Observable {


    //推送者发送新的信息
    public void putNews(){

        System.out.println("写了一个新的段子,我要发送给我的关注粉丝");

        //状态改变
        this.setChanged();
        //通知观察者更新状态
        this.notifyObservers();
    }

}

package Jobserver;


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

/**
 * 接受者(观察者)
 * 需要实现Observer接口,定义统一的调用接口
 */
public class Accepter implements Observer {


    @Override
    public void update(Observable o, Object arg) {
        System.out.println(o.toString() + "----状态改变,关联对象刷新状态");
    }
}

设计模式-观察者模式_第2张图片

关于jdk的被观察者父类和观察者接口的分析可以查看我github上的另一个案例。

设计模式-观察者模式_第3张图片

github地址: https://github.com/mashenghao/design

你可能感兴趣的:(设计模式,观察者模式,数据结构)