最近看设计模式,其中谈及到观察者模式.

可以理解为被观察者对外提供注册机制,观察者可以通过插入和移除实现订阅和取消订阅消息的功能,无论观察者有没有注册, 都不会影响被观察者发布消息.

而这在mmdetection中体现的很好.

举个例子来观察每天我的生活:

其中register_hook用来注册HOOK来判断是否要观察我的每天生活.

import sys
class HOOK:def before_getup(self, runner):print('{}:赖床30分钟'.format(sys._getframe().f_code.co_name))print('==runner:', runner)def after_getup(self, runner):print('{}:刷牙洗脸'.format(sys._getframe().f_code.co_name))print('==runner:', runner)def before_lunch(self, runner):print('{}:吃午饭之前上厕所'.format(sys._getframe().f_code.co_name))print('==runner:', runner)def after_lunch(self, runner):print('{}:吃完午饭午休30分钟'.format(sys._getframe().f_code.co_name))print('==runner:', runner)def before_dinner(self, runner):print('{}: 摸鱼30分钟'.format(sys._getframe().f_code.co_name))print('==runner:', runner)def after_dinner(self, runner):print('{}: 回家睡觉'.format(sys._getframe().f_code.co_name))print('==runner:', runner)def after_finish_work(self, runner, are_you_busy=False):if are_you_busy:print('{}:今天事贼多,还是加班吧'.format(sys._getframe().f_code.co_name))else:print('{}:今天没啥事,看部电影'.format(sys._getframe().f_code.co_name))print('==runner:', runner)class Runner(object):def __init__(self, ):passself._hooks = []def register_hook(self, hook):# 这里不做优先级判断,直接在头部插入HOOKself._hooks.insert(0, hook)def call_hook(self, hook_name):for hook in self._hooks:getattr(hook, hook_name)(self)def run(self):print('开始启动我的一天')self.call_hook('before_getup')self.call_hook('after_getup')self.call_hook('before_lunch')self.call_hook('after_lunch')self.call_hook('before_dinner')self.call_hook('after_dinner')self.call_hook('after_finish_work')print('睡觉算求')runner = Runner()
hook = HOOK()
runner.register_hook(hook)
runner.run()

设计模式--观察者模式相关推荐

  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. C++学习笔记35:函数模板
  2. 【Cocosd2d实例教程三】Cocos2d瓦片地图的导入
  3. 使用memcache缓存
  4. php7 有ext skel吗,PHP扩展开发系列02 - 老司机起步之函数
  5. 将byte数组以html形式输出到页面,java 数组显示到html
  6. 高手追小萝莉的故事(洛谷P1184题题解,Java语言描述)
  7. 骨牌铺方格(HDU-2046)
  8. Hadoop集群(第10期副刊)_常用MySQL数据库命令
  9. 巴里克黄金CEO:加密货币并不是比黄金更好的价值储存方式
  10. 解决:configure: error: Missing Xext.h, maybe to install libxext-dev packages?
  11. 饮食与癌细胞代谢的分子联系
  12. SpringBoot Logback配置,SpringBoot日志配置
  13. ORA-04031:unable to allocate 4120 bytes of shared memory ‘obj stat mem’故障解决
  14. 无软驱免F6在联想R510-G6-1U服务器上安装win 2003企业版的经历
  15. mysql常用客户端工具
  16. 初探TVM--TVM优化resnet50
  17. 超全现代虚幻UE4素材网站整理
  18. PostMan中文插件支持8.12.2
  19. svm神经网络葡萄酒matlab,SVM神经网络的数据分类预测--葡萄酒种类识别
  20. Python文件名繁体转简体

热门文章

  1. Github星标超3k的推荐系统入门资料合集(含教程、论文、代码、数据)
  2. 工作中如何做好技术积累
  3. BAT架构师进阶:大型网站架构书籍推荐
  4. 王昊奋 | 从聊天机器人到虚拟生命:AI技术的新机遇
  5. OSI七层模型详解-开放系统互联参考模型详解
  6. 【TensorFlow】常用的损失函数及其TensorFlow实现
  7. 【论文翻译】统一知识图谱学习和建议:更好地理解用户偏好
  8. JS高级学习笔记(6)- 事件循环
  9. ConcurrentHashMap源码剖析(1.8版本)
  10. Mac idea中git igenore设置