> 文档中心 > 13-设计模式——观察者模式

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


设计模式——观察者模式

观察者模式 ==> Observer

模式定义:

定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有依赖者都会收到通知更新

Class Diagram

主题(Subject)具有注册(register)和移除(remove)观察者、并通知(notify)所有观察者的功能,主题是通过维护一张观察者列表来实现这些操作的。

观察者(Observer)的注册功能需要调用主题的 registerObserver() 方法。

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

应用场景:

当更改一个对象的状态可能需要更改其他对象,并且实际的对象集实现未知或动态更改时

优点:

  1. 符合开闭原则
  2. 可以在运行时建立对象之间的关系
* java.util.Observable* org.springframework.context.ApplicationListener
package com.example.designpatterns.observer;import java.util.ArrayList;import java.util.List;/** * @program: DesignPatterns * @description: 观察者模式 - Observer * java.util.Observable * org.springframework.context.ApplicationListener * @author: Coder_Pan * @create: 2022-04-14 09:08 **/public class ObserverTest {    public static void main(String[] args) { System.out.println("观察者模式......"); //1、初始化主题对象 Subject subject = new Subject(); //2、创建两个观察者 Task1 task1 = new Task1(); subject.addObserver(task1); Task2 task2 = new Task2(); subject.addObserver(task2); //3、发送通知 subject.notifyObserver("发送通知!!!!!");    }}/** * 主题对象 */class Subject {    /**     * 容器 => 容器中存放若干个观察者     */    private List<Observer> containers = new ArrayList<Observer>();    /**     * add => 注册观察者     */    public void addObserver(Observer observer){ containers.add(observer);    }    /**     * remove => 移除观察者     */    public void removeObserver(Observer observer) { containers.remove(observer);    }    /**     * 数据发生变化时,需发送通知     */    public void notifyObserver(Object obj) { /**  * 循环通知每一个观察者  */ for (Observer item : containers) {     item.update(obj); }    }}/** * 观察者 */interface Observer {    /**     * 主题更新     * @param obj     */    void update(Object obj);}/** * 创建任务1 对象 */class Task1 implements Observer{    @Override    public void update(Object obj) { System.out.println( " task1===============>" + obj);    }}/** * 创建任务2 对象 */class Task2 implements Observer{    @Override    public void update(Object obj) { System.out.println( " task2===============>" + obj);    }}

艺术系歌词下载吧