观察者设计模式

简介: 在被观察者类中保存有一份观察者名单,在某些业务逻辑执行的时候,会调用观察者的通知接口观察者接口IObserverpackage pattern.

在被观察者类中保存有一份观察者名单,在某些业务逻辑执行的时候,会调用观察者的通知接口

  1. 观察者接口IObserver
package pattern.observer;

/**
 * 观察者接口
 */
public interface IObserver {
    void handleSome(String message);
}

2.观察者实现类ObserverFirst,ObserverSecond

package pattern.observer;

/**
 * 第一个观察者
 */
public class ObserverFirst implements IObserver {
    @Override
    public void handleSome(String message) {
        System.out.println(this.getClass().getSimpleName() + "正在处理【" + message + "】");
    }
}



package pattern.observer;

/**
 * 第二个观察者
 */
public class ObserverSecond implements IObserver {
    @Override
    public void handleSome(String message) {
        System.out.println(this.getClass().getSimpleName() + "正在处理【" + message + "】");
    }
}
  1. 被观察者接口IObserverable
package pattern.observer;

import java.util.ArrayList;

/**
 * 被观察者接口
 */
public interface IObserverable {
    /**
     * 添加观察者
     */
    void addObserver(IObserver iObserver);

    /**
     * 删除观察者
     */
    void removeObserver(IObserver iObserver);

    /**
     * doSome,被观察者观察的方法
     */
    void doSome(String some);

    /**
     * 观察者列表
     */
    ArrayList<IObserver> observerList();
}
  1. 被观察者实现类Observerable
package pattern.observer;

import java.util.ArrayList;

public class Observerable implements IObserverable {
    ArrayList<IObserver> observers;

    public Observerable() {
        observers = new ArrayList<>();
    }

    /**
     * 添加观察者
     */
    public void addObserver(IObserver iObserver) {
        observers.add(iObserver);
    }

    /**
     * 删除观察者
     */
    public void removeObserver(IObserver iObserver) {
        observers.remove(iObserver);
    }

    /**
     * doSome,被观察者观察的方法
     */
    public void doSome(String message) {
        for (IObserver observer : observers) {
            observer.handleSome(message);
        }
    }

    /**
     * 观察者列表
     */
    public ArrayList<IObserver> observerList() {
        return observers;
    }
}
  1. 测试
package pattern.observer;

import org.apache.commons.lang.StringUtils;

class MainClass {
    public static void main(String[] args) {
        /**
         * 观察者一号
         */
        IObserver first = new ObserverFirst();
        /**
         * 观察者二号
         */
        IObserver second = new ObserverSecond();

        /**
         * 被观察者
         */
        IObserverable observerable = new Observerable();
        /**
         * 被观察者添加观察者
         */
        observerable.addObserver(first);
        observerable.addObserver(second);

        /**
         * 被观察者执行业务逻辑
         */
        observerable.doSome("左转");

        System.out.println(StringUtils.repeat("=", 30));

        /**
         * 从观察者列表中删除第一个观察者
         */
        observerable.removeObserver(first);
        observerable.doSome("直行");
    }
}

结果;

ObserverFirst正在处理【左转】
ObserverSecond正在处理【左转】
==============================
ObserverSecond正在处理【直行】
目录
相关文章
|
3月前
|
设计模式 算法 调度
行为型设计模式:模板设计模式/观察者设计模式/策略设计模式/责任链设计模式
行为型设计模式:模板设计模式/观察者设计模式/策略设计模式/责任链设计模式
45 0
|
3月前
|
设计模式
设计模式-观察者(发布订阅)模式
设计模式-观察者(发布订阅)模式
|
设计模式 存储 大数据
大数据开发基础的设计模式的观察者
观察者模式是大数据开发基础的设计模式之一。它是一种行为型模式,用于定义对象之间的一对多依赖关系,当一个对象状态发生改变时,其所有依赖者都会收到通知并自动更新。
77 0
|
设计模式 前端开发
前端通用编程基础的设计模式之观察者
观察者模式是前端开发中非常常见且实用的一种设计模式。该模式可以帮助我们更好地设计和实现一些复杂的应用程序,例如事件处理、数据绑定以及状态管理等。
101 0
|
设计模式 Java Spring
观察者设计模式
观察者设计模式 特点: 被观察者持有监听的观察者的引用 被观察者支持增加和删除观察者 被观察者主题状态改变,通知观察者 下面开始模拟观察者设计模式 版本1: 版本2: 版本3: 为什么呢?因为监听器这
90 0
|
设计模式 uml
Rxjava源码解析笔记 | Rxjava概述 & 传统观察者设计模式源码解析
Rxjava源码解析笔记 | Rxjava概述 & 传统观察者设计模式源码解析
|
设计模式 Java 测试技术
浅析Java设计模式【3.3】——观察者
Java常用设计模式,观察者模式
83 0
浅析Java设计模式【3.3】——观察者
|
设计模式 存储
设计模式之观察者
设计模式之观察者
112 0
设计模式之观察者
|
设计模式
观察者设计模式
观察者设计模式
|
设计模式 前端开发 Java
探究netty的观察者设计模式
探究netty的观察者设计模式
136 0