设计模式: 行为型之中观察者模式(19)

C++ 设计模式19:观察者模式 观察者模式又被称为发布订阅模式。它定义了对象之间一对多的依赖,当一个对象状态发生改变时,它的所有依赖者都会收到通知并自动更新相关内容。即建立一个(Subject类)对多(Observer类)的关系,能够使得当Subject的对象变化的时候,依赖这个的多个Observe的对象实例也能够同步进行相应的改变。 优点: 观察者和被观察者是抽象耦合的。 可以建立一套触发机制。 缺点: ... 阅读详情

观察者模式概述

  • 观察者模式(Observer Pattern)是一种行为设计模式
  • 它定义了对象之间的依赖关系,当一个对象(被称为主题或发布者)的状态改变时
  • 所有依赖于它的对象(被称为观察者)都会得到通知并自动更新

观察者模式应用

// 定义观察者接口
interface Observer {
  update(data: any): void; // 更新方法,当主题状态改变时,观察者通过这个方法获取更新
}

// 定义主题接口
interface Subject {
  attach(observer: Observer): void; // 注册观察者
  detach(observer: Observer): void; // 移除观察者
  notify(data: any): void; // 通知所有观察者状态改变
}

// 创建一个具体主题类实现
class ConcreteSubject implements Subject {
  private observers: Observer[] = []; // 存储观察者集合
  private state: any;

  getState(): any {
    return this.state;
  }

  setState(newState: any): void {
    this.state = newState;
    this.notify(newState);
  }

  attach(observer: Observer): void {
    this.observers.push(observer);
  }

  detach(observer: Observer): void {
    const index = this.observers.indexOf(observer);
    if (index !== -1) {
      this.observers.splice(index, 1);
    }
  }

  notify(data: any): void {
    this.observers.forEach((observer) => observer.update(data));
  }
}

// 创建一个具体观察者类实现
class ConcreteObserver implements Observer {
  private name: string;

  constructor(name: string) {
    this.name = name;
  }

  update(data: any): void {
    console.log(`${this.name} received the update: ${data}`);
  }
}

// 使用示例
function main() {
  const subject = new ConcreteSubject();
  const observer1 = new ConcreteObserver("Observer 1");
  const observer2 = new ConcreteObserver("Observer 2");

  subject.attach(observer1);
  subject.attach(observer2);

  subject.setState("New State");
}

main();
  • 在这个例子中, Observer 接口定义了观察者所需要实现的 update 方法,当主题状态改变时,观察者通过这个方法获取更新信息
  • Subject 接口定义了主体类需要实现的方法,包括注册观察者(attach)、移除观察者(detach)和通知所有观察者(notify)
  • ConcreteSubject类实现了 Subject 接口,其中存储了观察者列表,并在状态改变时通过 notify 方法通知所有观察者
  • ConcreteObserver 类实现了 Observer 接口,当接收到更新时,会打印出更新的信息
  • 在 main 函数中,我们创建了一个具体主题对象和两个具体观察者对象,将观察者对象注册到主题对象,然后更改主题状态,触发观察者对象的 update 方法执行

观察者模式与发布订阅的区别和联系

  • 观察者模式(Observer Pattern)和发布订阅模式(Publish-Subscribe Pattern)在设计理念上具有一定的相似性,都涉及到对象间的一对多依赖关系和事件通知机制,但它们在具体实现和适用场景上有所区别
  • 观察者模式是经典的23种设计模式之一,属于行为型设计模式,它强调的是当对象状态改变时,能够自动通知其依赖的对象
  • 发布订阅模式虽然在某些文献中也被看作是观察者模式的一个扩展或变体,但它并不是23种经典设计模式中明确列出的模式
  • 发布订阅模式更倾向于在分布式系统和消息传递系统中应用,它通过引入消息中间件或者事件总线等机制进一步解耦了发布者和订阅者,使得它们可以异步处理消息,甚至在不同的进程中或服务器之间进行通信

1 )观察者模式(Observer Pattern)

  • 定义
    • 定义了一种一对多的依赖关系,当一个对象(Subject)的状态发生改变时
    • 所有依赖于它的对象(Observer)都会得到通知并自动更新
  • 特点
    • 直接依赖:观察者(Observer)直接订阅目标(Subject)的状态变化
    • 同步或异步:观察者模式既可以实现为同步也可以实现为异步,取决于具体实现
    • 弱耦合:Subject只知道有观察者接口的存在,而不需要了解具体的观察者实现
    • 应用场景:常应用于单个应用程序内部,如GUI编程中的事件处理、组件间通信等

2 )发布订阅模式(Publish-Subscribe Pattern)

  • 定义
    • 又称发布-订阅模式,引入了一个消息中心(Event Channel/Mediator)的概念,发布者(Publisher)发布事件到消息中心
    • 订阅者(Subscriber)从消息中心订阅感兴趣的事件,两者并不直接相互依赖
  • 特点
    • 间接依赖:发布者和订阅者之间通过一个独立的媒介(消息中心)交换消息。
    • 强烈异步:发布订阅模式通常采用异步的方式处理消息,更适合分布式环境和大规模系统的事件通信。
    • 更高的解耦程度:发布者和订阅者完全不了解对方的存在,它们通过事件名称进行匹配。
    • 应用场景:广泛应用于分布式系统、消息队列、跨进程/跨应用通信、微服务架构等。

3 )区别与联系


3.1 区别

  • 关系模型:观察者模式是直接对象间的互动,而发布订阅模式通过第三方(消息中心)中转。
  • 异步处理:观察者模式不一定异步,发布订阅模式通常是异步的。
  • 适用范围:观察者模式常见于单一应用内,发布订阅模式更适合分布式和跨系统的事件处理。

3.2 联系

  • 都是事件驱动:两者都基于事件通知机制,解决了对象间的通知和联动问题
  • 解耦思想:都旨在减少对象间的直接耦合,使得系统更灵活,更易于扩展和维护。

4 )总结

  • 观察者模式着重于对象级别的直接观察和通知
  • 而发布订阅模式则更加强调通过消息渠道在更大范围内的事件传播和订阅
  • 在实际应用中,观察者模式往往是发布订阅模式的一种实现方式,特别是在单体应用中
  • 而在分布式系统中,发布订阅模式往往更为普遍,因为它能够更好地支持松耦合和异步通信
  • 所以,观察者模式是23种设计模式中的一个正式成员,而发布订阅模式虽在理念上与之类似
  • 但在实践中体现出了更广泛的适用性和更强的解耦能力,它是观察者模式在特定场景下的自然延伸和发展

发布订阅的应用


发布订阅模式(Publish-Subscribe Pattern)在TypeScript中的实践应用通常涉及事件分发和处理中心,也就是一个事件总线或事件通道

以下是一个基本的TypeScript实现

// 重命名接口避免冲突
interface AppEvent {
  type: string;
  data?: any;
}
 
// 更新订阅者接口
interface Subscriber {
  subscribe(eventType: string, callback: (event: AppEvent) => void): void;
  unsubscribe(eventType: string, callback: (event: AppEvent) => void): void;
}
 
class PubSub implements Subscriber {
  private eventCallbacks = new Map<string, ((event: AppEvent) => void)[]>();
 
  subscribe(eventType: string, callback: (event: AppEvent) => void): void {
    const callbacks = this.eventCallbacks.get(eventType) || [];
    callbacks.push(callback);
    this.eventCallbacks.set(eventType, callbacks);
  }
 
  unsubscribe(eventType: string, callback: (event: AppEvent) => void): void {
    const callbacks = this.eventCallbacks.get(eventType);
    if (!callbacks) return;
    
    const index = callbacks.indexOf(callback);
    if (index > -1) callbacks.splice(index, 1);
  }
 
  publish(event: AppEvent): void {
    const callbacks = this.eventCallbacks.get(event.type) || [];
    // 使用slice()防止回调中修改数组影响执行
    callbacks.slice().forEach(cb => cb(event));
  }
}
 
class UserComponent {
  constructor(private pubsub: PubSub) {
    this.initListeners();
  }
 
  private initListeners() {
    this.pubsub.subscribe('user:login', this.onUserLogin.bind(this));
  }
 
  private onUserLogin(event: AppEvent) {
    console.log('User logged in:', event.data);
  }
 
  triggerUserLogin(user: any) {
    this.pubsub.publish({ type: 'user:login', data: user });
  }
}
 
// 使用示例
const pubsub = new PubSub();
const userComponent = new UserComponent(pubsub);
userComponent.triggerUserLogin({ username: 'example' });
  • 在这个例子中:定义了 Event 接口描述事件的基本结构,包括事件类型和携带的数据
  • Subscriber 接口定义了订阅和取消订阅事件的方法
  • PubSub 类实现了 Subscriber 接口,维护了一个事件类型与回调函数数组的映射表,可以订阅、取消订阅事件以及发布事件
  • UserComponent 类作为一个使用者,通过 PubSub 类订阅特定事件,并在事件触发时执行相关操作。当用户登录时,通过 triggerUserLogin 方法发布事件
  • 这样,通过发布订阅模式,我们可以轻松地在不同的组件间解耦事件的触发和响应逻辑,使得整个系统更加灵活和可扩展

关于浏览器UI点击事件

  • UI上的按钮点击事件通常更接近于观察者模式

  • 在观察者模式中,一个对象(称为主题或可观察对象)维护一个依赖于它的对象列表(称为观察者),当主题的状态发生变化时,它会通知所有的观察者

  • 具体到UI上的按钮点击事件,按钮本身可以被看作是可观察对象,而点击事件的监听器或回调函数则是观察者

  • 当按钮被点击时,它的状态发生了变化(从未被点击到被点击),此时它会通知所有注册了点击事件的监听器或回调函数,这些监听器或回调函数随后会执行相应的操作

  • 虽然发布订阅模式与观察者模式在概念上有相似之处,但在典型的发布订阅模式中,消息是通过一个中央的消息代理(或称为发布者/订阅者管理器)进行传递的

  • 发布者将消息发布到消息代理,而订阅者则从消息代理中订阅它们感兴趣的消息。这种模式在分布式系统或大型应用中更为常见,因为它可以实现更高级别的解耦和灵活性。

  • 然而,在UI按钮点击事件的上下文中,通常没有这样一个中央的消息代理

  • 按钮直接与其监听器或回调函数进行交互,因此更符合观察者模式的直接交互特性

  • 总结来说,UI上的按钮点击事件通常被视为观察者模式的一个实例,尽管在某些情况下,也可以将其设计为实现发布订阅模式,但这通常不是最常见的做法

【软工方法论19】行为型设计模式观察者模式全解析 观察者模式是一种行为型设计模式,定义了一对多的依赖关系,当被观察者状态改变时,所有观察者会自动收到通知。该模式解决了对象间紧耦合的问题,典型应用包括微信公众号推送、天气预报更新等场景。核心结构包含Subject(被观察者)和Observer(观察者)接口,通过注册/移除机制动态管理观察者。实现方式是被观察者维护观察者列表,状态变化时调用notifyObservers()通知所有观察者。常见应用场景包括GUI事件处理、消息推送系统等,实现了发布-订阅的松耦合交互。 阅读详情

相关推荐

手把手教你用MSPM0G3507和TB6612驱动MG513X电机(附完整代码与PID调速)

本文详细介绍了如何使用MSPM0G3507微控制器和TB6612驱动模块控制MG513X电机,包括硬件连接、软件配置、编码器测速和PID调速等关键步骤。通过完整的代码示例和PID算法实现,帮助开发者快速掌握电机驱动技术,适用于智能小车、机械臂等嵌入式项目。

weixin_30254435的博客 341

设计模式精讲 Day 19:观察者模式(Observer Pattern)

观察者模式是一种行为型设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都会自动收到通知并更新。核心思想:解耦发布者与订阅者,实现松耦合的通信机制。通过本篇文章的学习,我们掌握了观察者模式的核心思想、实现方式以及在实际项目中的应用。观察者模式是一种非常实用的行为型设计模式,尤其适合需要对象间松耦合通信的场景。

在未来等你的专栏 1032

从放弃到再入门之拉格朗日对偶问题推导

普通同学的解法 无约束条件:求导就可以了 等式约束:代入消元,再求导 不等式约束:分情况讨论(在边界上和不在边界上),分别对应1,2的情况 然而发现,有些情况消元特别复杂,甚至不能求解 聪明同学的解法 发现:在最优点的情况下,约束曲面的法向量和目标函数的梯度反向必相同或相反 拉格朗日乘子法如何理解? (在2维里可以形象的解释为z=f(x,y)在约束条件g(x,y)=c中,极值...

qq_34564612的博客 1万+

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

观察者模式(Observer Pattern)是一种行为型设计模式,用于在对象之间建立一种一对多的依赖关系,使得当一个对象状态改变时,其相关依赖对象都能得到通知并自动更新。

暴躁的菜鸡的博客 654

LTspice仿真报错Timestep too small?5种实测有效的解决方法(附详细参数配置)

本文针对LTspice仿真中常见的“Timestep too small”报错,提供了5种经过实测有效的解决方案。从理解错误根源入手,详细介绍了调整求解器、仿真参数、优化精度容差、设置初始条件、为理想元件添加寄生参数以及使用高级指令等具体方法,并附有详细的参数配置步骤,帮助工程师快速定位并解决仿真收敛问题,提升电路设计效率。

weixin_29213655的博客 281

别再手动调参了!用MATLAB+改进PSO算法,5步搞定机械臂轨迹优化(附完整代码)

本文介绍如何利用MATLAB和改进PSO算法快速优化机械臂轨迹规划,仅需5步即可完成传统耗时的手动调参过程。通过混沌初始化、自适应权重等创新方法,改进PSO算法显著提升优化效率,实现全局最优解搜索,适用于工业自动化中的机械臂控制。文章包含完整MATLAB代码实现,帮助工程师轻松应用于实际生产场景。

weixin_29232121的博客 357

JAVA设计模式(19):行为型-观察者模式(Observer)

观察者模式是设计模式中的“超级模式”,其应用随处可见,在之后几篇文章里,我将向大家详细介绍观察者模式。         “红灯停,绿灯行”,在日常生活中,交通信号灯装点着我们的城市,指挥着日益拥挤的城市交通。当红灯亮起,来往的汽车将停止;而绿灯亮起,汽车可以继续前行。在这个过程中,交通信号灯是汽车(更准确地说应该是汽车驾驶员)的观察目标,而汽车是观察者。随着交通信号灯的变化,汽车的行为

The Best Or Nothing~ 6437

ANPC三电平拓扑:两种调制方式解析

ANPC结构是基于“I”型NPC结构(下面讲NPC如不特殊说明,均指的是“I”型结构NPC)发展出来的一种改进型。我们在讲NPC结构的时候会谈到他的一个缺点就是损耗分布不均匀,会导致温升不均衡,进而限制模块的功率输出能力。而ANPC结构由于多了两个开关管以及相应的两个中性点换流回路(如下图),可以更加灵活任意的配置开关管可以使损耗没有那么的不均衡,从而能一定程度上提高模块的输出功率。ANPC拓扑结构图以及增加的环流回路。

IOTBOT的博客 9502

设计模式 19 观察者模式

观察者模式的核心思想是当一个对象(被观察者)的状态改变时,所有依赖于它的对象(观察者)都会被通知并更新。这样一来,观察者模式实现了对象之间的松散耦合,使得一个对象的变化可以自动地传播到相关的对象。观察者模式通过定义一对多的依赖关系,实现了对象间的松散耦合和动态通信。它允许对象自动通知相关的依赖对象并更新状态,非常适合用于事件驱动的系统和需要动态更新的场景。尽管可能会带来一定的通知开销和复杂性管理,但它依然是实现对象间动态通信的强大工具。

Winemonk 1230

STM407ZET6+OV5640调试心得

最近一个项目用了STMF407ZET6 +OV5640,调试了好几天做些总结; STMF407ZET6 开发板用的是正点原子的开发板,OV5640摄像头用的是秉火摄像头; 这其中有一个大坑,开发板的DCMI接口跟摄像头的接口不一样,要重新用杜邦线进行连接; 本人是在正点原子的“”15,ATK-OV5640摄像头模块“”源码上进行修改的。

kingseacjh的专栏 8326

Orange3实战教程:转换---预处理

部件提供了多种预处理方法,这些方法可以在单个预处理流程中组合使用。某些方法也可作为独立部件提供,支持更高级的技术和参数调整。连接到测试与评分:在交叉验证的每个批次中应用预处理器,随后学习器的预处理器会作用于预处理后的子集。连接到学习器:覆盖学习器的默认预处理流程,仅应用自定义流程(各学习器的默认步骤详见其文档)。直接连接到原始数据并输出预处理后的数据集,可能导致模型过拟合。:从原始数据中随机选择固定数量或百分比的特征,主要用于高级测试或教学用途。的预处理器输入,同时传入数据和学习器(如。

err2008的专栏 148

设计模式19 - 观察者模式

作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 观察者模式 使用场景 优缺点 注意事项 UML结构图 代码实现 ...

billy的博客 376

【TC3xx芯片】TC3xx芯片看门狗复位的默认行为分析

TC3xx芯片看门狗复位的默认行为分析

qq_36056498的博客 351

Java设计模式 -19- 观察者模式(Observer模式)

Java设计模式 -19- 观察者模式(Observer模式)前言模式的定义与特点优点:缺点:模式的结构与实现1. 模式的结构2. 模式的实现模式的应用实例模式的应用场景模式的扩展1. Observable类2. Observer 接口 前言 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组

Android系统工程师--小馬佩德罗 841

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

设计模式(19)-观察者模式

观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。

潘威威的博客 1612

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

(19)行为型模式——观察者

行为型模式——观察者(Observer) 目录行为型模式——观察者(Observer)问题背景解决方案效果缺陷相关模式实现 问题背景 当需要一种一对多的通知机制时,考虑使用观察者。在一些游戏中,策划出于某种目的会把玩家的属性划分成一级属性(力量、智力、体质等)和二级属性(生命、魔法、攻击力、防御力等)。在其他因素(装备、修炼、BUFF等)不变的条件下,二级属性是一级属性的函数。因此,在一级属性发生...

卐DIAX卍 680

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

每天记录学习的新知识 :Android 设计模式之行为型

文章目录前言创建型行为型结构型行为型设计模式学习6. 策略模式7. 状态模式8. 观察者模式9. 中介者模式10. 访问者模式11. 迭代器模式12. 模板方法13. 备忘录模式14. 命令模式15. 解释器模式16. 职责链模式 前言 Android 的设计模式分为3大类,一个23种。 创建型 单例模式; 2. Builder模式; 3. 原型模式; 4. 工厂方法; 5. 抽象工厂 行为型 策略模式; 7. 状态模式; 8. 观察者模式; 9. 中介者模式; 10.

嗯... 471

白话设计模式之(19):代理模式与观察者模式的深度剖析

大家好!在技术学习的漫漫长路上,我始终坚信分享能让我们共同成长,一起攻克各种技术难题。今天,咱们深入探讨设计模式中的代理模式和刚引入的观察者模式(先简单带过引入部分,重点在代理模式剖析,后续会详细展开观察者模式),代理模式就像是对象访问的“智能管家”,而观察者模式则像是消息传递的“顺风耳”。希望通过这篇博客,大家能对这两种模式有更清晰的认识,在编程的道路上更进一步。

wj_rdk的博客 1506

C++ 设计模式 十九:观察者模式 (读书 现代c++设计模式)

何时需要使用观察者模式?观察者模式的核心应用场景是实现对象间的一对多依赖关系,当被观察对象(Subject)的状态变化需要自动通知多个依赖对象(Observer)时使用。事件驱动系统GUI框架中按钮点击事件、数据模型变化触发视图更新。示例:用户点击按钮后,通知多个UI组件刷新状态。实时数据分发传感器数据更新时,通知多个监控模块(如温度传感器→显示屏、报警器)。发布-订阅机制消息队列中生产者发布消息,多个消费者订阅并处理消息。示例:新闻推送系统,用户订阅主题后接收相关新闻。

Duramentee的博客 2037

5 分钟 JS 设计模式 - 单例与观察者模式(第19节)

探索JavaScript设计模式,掌握单例模式、工厂模式和观察者模式的核心思想与实现方法。单例模式确保全局唯一实例,适用于状态管理;工厂模式封装对象创建,提升代码灵活性;观察者模式实现发布-订阅机制,优化对象间通信。通过实际代码示例和对比分析,本文帮助你快速理解并应用这些经典设计模式,提升代码质量和开发效率。立即阅读,开启你的设计模式之旅!

星核日记,一个编程开发者的小天地。我将和大家一起,穿梭于多语言迷宫,剖析算法精妙,分享实战项目。 945

设计模式19——观察者模式

1、观察者模式定义了一种一对多的依赖关系,让多个观察者(订阅者)对象同时监听某一个主题(发布者)对象。这个主题(发布者)对象在状态发生变化时,会通知所有观察者(订阅者)对象,使它们能够自动更新自己。

weixin_43687024的博客 1709

【设计模式(19)】行为型模式之观察者模式

个人学习笔记分享,当前能力有限,请勿贬低,菜鸟互学,大佬绕道 如有勘误,欢迎指出和讨论,本文后期也会进行修正和补充 前言 前面有一篇文章已经介绍了订阅/发布模式,即生产者和消费者通过一个中介者来交互 生产者只负责向中介传递数据,不关心其余步骤 消费者在中介者处进行注册,告知中介者自己需要数据 中介者接受来自生产者的数据,并传递给在自己这里注册过的消费者 当生产者只有一个的时候,可以省略掉中介者,直接在生产者处注册消费者 通常满足N-1-N或者1-N的交互模型 消费者在中介者处或者直接向生产者订阅.

路远不知归 263

设计模式深入浅出--19.观察者模式简单实例中Observer和Observable及其在JDK中的应用

观察者模式 定义:定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发送变化时,它的所有依赖者(观察者)都会收到通知并更新 类型:行为型 适用场景: 关联行为场景,建立一套触发机制 优点: 观察者和被观察者之间建立一个抽象的耦合 观察者模式支持广播通信 缺点: 观察者之间有过多的细节依赖。太高时间消耗及程序复杂度 使用要得当,要避免循环调用 Cod...

moxiaolin的博客 636

【从零入门23种设计模式19】行为型之观察者模式

摘要:观察者模式是一种行为型设计模式,通过定义对象间一对多的依赖关系,实现当主题(被观察者)状态变化时自动通知所有观察者。该模式核心包括主题、观察者、具体主题和具体观察者四个角色,典型应用场景如公众号推送、订单支付事件通知等。在Spring中可通过ApplicationEvent和ApplicationListener实现,具有解耦、动态扩展等优点,但需注意通知顺序、性能损耗等问题。与发布-订阅模式相比,观察者模式耦合度更高,适用于单机内的事件通知,而发布-订阅模式通过消息中间件实现完全解耦,适用于分布式系

2401_87662859的博客 678

【Java开发】设计模式 19:观察者模式

备忘录模式是一种行为型设计模式,在该模式中,被观察者对象维护着一份观察者列表,并提供了注册、删除和通知等方法,而观察者对象则对被观察者对象进行注册,以便在需要时接收通知并进行相应的处理。观察者模式可以有效地实现对象间的松耦合,使得系统更加灵活和易于扩展。

尹煜的博客 624

行为型设计模式之——观察者模式

一、概念                 观察者模式(有时又被称为模型(Model)-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。   二、痛点         观察者的痛...

Coding 434
上一篇: 设计模式: 行为型之中介者模式(18)
下一篇: 设计模式: 行为型之中状态模式(20)
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值