首页 > 其他分享 >设计模式:观察者模式

设计模式:观察者模式

时间:2024-01-19 10:06:32浏览次数:24  
标签:observable IObservable void 观察者 模式 event 设计模式 public

1. 观察者模式

  • 观察者模式(Observer Pattern)
  • 观察者模式又叫作发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependent)模式
  • 一对多的依赖关系,一个主题对象可被多个观察者对象同时监听,每当主题对象状态变化时,所有依赖它的对象都会得到通知并被自动更新

观察者模式的核心是将观察者与被观察者解耦,以类似消息/广播发送的机制联动两者,使被观察者的变动能通知到感兴趣的观察者们,从而做出相应的响应

1.1 组成

  • 抽象主题(ISubject):指被观察的对象(IObservable)
  • 具体主题(ConcreteSubject):具体被观察者
  • 抽象观察者(IObserver):定义响应通知的更新方法
  • 具体观察者(ConcreteObserver):当得到状态更新的通知时,会自动做出响应

2. 示例

注册观察者,订阅主题(subject)

/**
 * 主题:被观察者
 */
public interface ISubject {
    void notify(String event);
    boolean register(IObservable observable);
    boolean remove(IObservable observable);
}
public class ConcreteSubject implements ISubject {

    private List<IObservable> observables = new ArrayList<>();

    @Override
    public boolean register(IObservable observable) {
        return !this.observables.contains(observable) && this.observables.add(observable);
    }

    @Override
    public boolean remove(IObservable observable) {
        return this.observables.remove(observable);
    }

    @Override
    public void notify(String event) {
        for (IObservable observable : this.observables) {
            observable.handler(event);
        }
    }
}

Observer 接口,它将不同的观察者聚合在一起

/**
 * 观察者:监听被观察者的变化
 */
public interface IObservable {
    void handler(String event);
}

public class ConcreteObserverA implements IObservable {
    @Override
    public void handler(String event) {
        System.out.println("concrete observer A: " + event);
    }
}

public class ConcreteObserverB implements IObservable {
    @Override
    public void handler(String event) {
        System.out.println("concrete observer B: " + event);
    }
}

标签:observable,IObservable,void,观察者,模式,event,设计模式,public
From: https://blog.51cto.com/u_13529088/9324840

相关文章

  • 状态模式总结
    综述本文总结了状态模式的定义,特点,使用场景以及实现思路。状态模式的定义状态模式为23种设计模式之中应用比较少见的模式,这并不是因为其适用范围过于狭窄,而是由于其兄弟模式“策略模式”实在过于强大了,但本文只关注状态模式,这里提一句以供参考。状态模式是一种简化多步骤流程......
  • 《微服务架构设计模式》PDF
    成功地开发基于微服务架构的应用软件,需要掌握一系列全新的架构思想和实践。在这本独特的书籍中,微服务架构的先驱、Java开发者社区的意见领袖ChrisRichardson收集、分类并解释了44个架构设计模式,这些模式用来解决诸如服务拆分、事务管理、查询和跨服务通信等难题。本书将教......
  • 设计模式:六大原则
    文章目录1.单一职责原则(SingleResponsibilityPrinciple,SRP)1.1.定义1.2.代码实现1.3.优缺点1.4.使用场景2.开闭原则(Open-ClosedPrinciple,OCP)2.1.定义2.2.代码实现2.3.优缺点2.4.使用场景3.里氏代换原则(LiskovSubstitutionPrinciple,LSP)3.1.定义3.2.......
  • 我所关注的几个spring设计模式
    Spring框架中实现了许多的设计模式,而且都是非常优先的实现,这些值得我们学好好习。不过话说回来,我觉得自己只要关注几个即可:单例工厂代理适配器观察者委派在各种设计模式中,适配器和装饰器、代理模式其实都很类似,只是侧重点不同而已。spring的设计模式应用的很好,但spring......
  • Golang中的工厂模式:灵活选择存储方式实现文件存储
    Golang中的工厂模式:灵活选择存储方式实现文件存储原创 沙蒿 程序员的碎碎念 2024-01-0508:20 发表于广东 听全文 引言在现代软件开发中,文件存储是一个常见的需求,而选择合适的存储方式对于系统的可扩展性和性能至关重要。本文将介绍如何使用工厂模式在Golang中实......
  • 享元模式
    把一些常用且不变的对象保存在一个队列里,每次优先从队列中取,没取到则新创建一个,再将它插入队列以供后续使用定义:提供了减少对象数量从而改善应用所需的对象结构的方式,运用共享技术有效的支持大量细粒度的对象类型:结构型适用场景:常常应用于系统底层的开发,以便解决系统的......
  • 设计模式 经典问题
    目录策略模式和简单工厂模式的区别策略模式的类图为什么采用聚合简单工厂模式的类图为什么采用关联表示策略模式和简单工厂模式的区别策略模式和简单工厂模式是两种不同的设计模式,它们在用途和实现上有所不同。简单工厂模式是一种创建型模式,用于创建特定类型的对象。它通过一......
  • Flink 1.18 Standalone 应用模式部署
    本文基于:FlinkJavaDemo1.下载https://dlcdn.apache.org/flink/flink-1.18.0/flink-1.18.0-bin-scala_2.12.tgz2.解压mkdir/usr/flinktar-zxvf/home/flink-1.18.0-bin-scala_2.12.tgz-C/usr/flink/3.推送端运行netcatnc-lp78784.将Maven的包复制到flink的lib目......
  • Spark-Yarn模式部署
    Spark-Yarn模式部署1.解压缩文件将spark-3.0.0-bin-hadoop3.2.tgz文件上传到linux并解压缩,放置在指定位置。#在/opt/software中tar-zxvfspark-3.0.0-bin-hadoop3.2.tgz-C/opt/modulecd/opt/modulemvspark-3.0.0-bin-hadoop3.2spark2.修改配置文件修改hadoop配......
  • ESXi 主机上配置和管理锁定模式
    要提高ESXi主机的安全性,可以将其置于锁定模式。在锁定模式下,默认情况下,操作必须通过 vCenterServer执行。可以选择正常锁定模式或严格锁定模式,这两种模式提供不同的锁定程度。还可以使用“例外用户”列表。主机进入锁定模式时,例外用户不会丢失其特权。使用“异常用户”列表可添加......