观察者模式

1、内容

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于他的对象都得到通知并被自动更新。

观察者模式又称‘发布-订阅’模式

2、角色

抽象主题(Subject)

具体主题(ConcreteSubject)——发布者

抽象观察者(Observer)

具体观察者(ConcreteObserver)——订阅者

3、使用场景

当一个抽象模型有两方面,其中一方面依赖于另一方面。将这两者封装在独立对象中以使它们可以独立地改变和复用。

当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变。

当一个对象必须通知其他对象,而它又不能假定其他对象是谁。换言之,你不希望这些对象是紧密耦合的

4、优点

目标和观察者之间的抽象耦合最小

支持广播通信

5、缺点

多个观察者之间互不知道对方存在,因此一个观察者对主题的修改可能造成错误的更新。

6、代码示例

from abc import ABCMeta, abstractmethod
class Observer(metaclass=ABCMeta):@abstractmethoddef update(self, notice):passclass Notice:def __init__(self):self.observers = [] # 记录该主体的观察者(订阅者)def attach(self, obs):self.observers.append(obs)def detach(self, obs):obs.company_info = Noneself.observers.remove(obs)def notify(self):for obj in self.observers:obj.update(self)class ManagerNotice(Notice):def __init__(self, company_info=None):super().__init__()self.__company_info = company_info@propertydef company_info(self):return self.__company_info@company_info.setterdef company_info(self, info):self.__company_info = infoself.notify()class Manager(Observer):def __init__(self):self.company_info = Nonedef update(self, noti):self.company_info = noti.company_infonotice = ManagerNotice()alex = Manager()
wusir = Manager()# print(alex.company_info)
# print(wusir.company_info)notice.attach(alex)
notice.attach(wusir)
#
notice.company_info="公司运行良好"
#
print(alex.company_info)
print(wusir.company_info)
#
notice.detach(wusir)
#
notice.company_info="公司要破产了"print(alex.company_info)
print(wusir.company_info)复制代码

识别图中二维码,领取python全套视频资料

设计模式(观察者模式)相关推荐

  1. Python设计模式-观察者模式

    Python设计模式-观察者模式 代码基于3.5.2,代码如下; #coding:utf-8 # 观察者设计模式class observerInterface():def update(self,va ...

  2. [Head First设计模式]山西面馆中的设计模式——观察者模式

    原文:[Head First设计模式]山西面馆中的设计模式--观察者模式 系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 引言 不知不自觉又将设计模式融入生活了,吃个饭也 ...

  3. java设计模式--观察者模式(Observer)

    java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...

  4. 【学习笔记】ABAP OOD设计模式 - 观察者模式

    ABAP OOD设计模式 - 观察者模式 整理转自-<SAP ABAP 面向对象程序设计(原则.模式及实践)> 定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,这个对象相关依赖的 ...

  5. Java设计模式-观察者模式(订阅发布模式)

    Java设计模式-观察者模式(订阅发布模式) 一起来看 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一起坚持吧!! ...

  6. 设计模式---观察者模式介绍与理解

    设计模式---观察者模式介绍与理解: 观察者模式原理:类似于定牛奶业务 1. 奶站,subject:登记注册,移除,通知(register,remove,notify) 2. 用户,observer: ...

  7. 设计模式-观察者模式 发布/订阅模式

    设计模式-观察者模式 发布/订阅模式 代码 观察者接口 public interface IHanFeiZi{// 当吃早饭时public void havBreakFast();// 进行娱乐活动时 ...

  8. 设计模式 | 观察者模式及典型应用

    本文主要内容: 介绍观察者模式 微信公众号的发布/订阅示例 观察者模式总结 分析观察者模式的典型应用 JDK 提供的观察者接口中的观察者模式 Guava EventBus 中的观察者模式 JDK 委托 ...

  9. 李建忠设计模式——观察者模式

    1.观察者模式(Observer/Event) 1.动机 在软件构建过程中,需要为某些对象建立一种"通知依赖关系"--一个对象(目标)的状态发生改变,所有的依赖对象(观察者对象)都 ...

  10. 设计模式●观察者模式

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

最新文章

  1. 服务器状态监控之一背景介绍及解决方案建议
  2. Linux Kernel TCP/IP Stack — L3 Layer — netfilter 框架 — iptables NAPT 网络地址/端口转换
  3. linux 内核 调试工具介绍
  4. ARM MOV指令对立即数的要求
  5. gitlab访问慢,出现502,特别卡,耗内存cpu解决办法
  6. Python 爬虫性能相关总结
  7. jenkins ssh 部署 Can't connect to server 错误
  8. 【同124】LeetCode 687. Longest Univalue Path
  9. snap7库C++版本对PLC数据的读写
  10. 数组取交集、并集与补集
  11. APP推广技巧:APP营销推广的八种渠道你一定要了解!
  12. [已授权] 互联网定位技术小谈
  13. MacOS系统升级与MacOS13版本
  14. 金蝶云苍穹集成,苍穹到eas审核反审核
  15. (理财七)如何挑选合适的贷款
  16. phpstudy后门代码利用及分析
  17. 《番茄工作法》让你的一天变成26小时
  18. 哈工程自考计算机应用数学,自考本科计算机应用数学 01332
  19. [netplus] 初心之让人人能写高性能网络服务器
  20. ATmega128单片机与舵机控制板通信

热门文章

  1. 深度学习之父Hinton:下一代神经网络
  2. 两年三次刷PascalVOC最佳纪录,阿里图灵实验室怎样解决目标检测
  3. 「行业趋势」人工智能凭什么“教育”人
  4. 人工智能落地之路:从概念验证到产品
  5. 德鲁克对管理的十大看法
  6. 神经元产生的雌激素可能是一种新型的神经调节剂
  7. 管理已“死”,经营为王时代来临
  8. 「特征工程」与「表示学习」
  9. 9位AI教授总结2017年:技术变得平民化,但商业竞争在不断升级
  10. 多核之后,CPU 的发展方向是什么?中科院计算所包云岗详细解读