小菜学设计模式——观察者模式

2019独角兽企业重金招聘Python工程师标准>>> hot3.png


背景   

    上一次去看电影院看电影,半旁边的妹子说只要扫一扫就能免费领取爆米花一份,你说我怎么躲得过妹子的招数呢?所以拿起我的手机,扫一扫,注册会员,ok 领取爆米花。时间过去了,我发现我的手机怎么老是收到一些乱七八糟的信息,一旦有什么大小事我都会收到信息,你可知道我是拒绝的。恩,这里就说说,观察者模式,因为我的手机号码已经成为他们发消息的接收者,或说监听器、或说观察者。


1、使用意图   

    当一个对象改变的同时需要改变其他对象时,观察者模式似乎很受用。


2、生活实例   

    饭点一到,所有同事包括我立刻放下手中的活,有看NBA的、有睡觉的,有直接去食堂排队等饭吃的。似乎这里少了一个通知的过程,呵呵,不要紧。

3、Java 例子(框架、JDK 、JEE)

    因为观察者的本质就是监听器,所以使用监听器最多的当然是Swing或AWT,比如一个按钮被点击会触发click事件,鼠标移动会触发mouseover事件等,事件触发,就会通知对应观察者(监听器)

4、模式类图    

225413_rkaM_1989321.jpeg

  1. 抽象主题角色(Subject):定义一个接口,声明作为主题角色应该具备的方法(对观察者对象的增删改之类的方法声明)。

  2. 主题角色(Concrete Subject):实现了抽象主题角色,实现了它的所有方法,并且含有一个抽象观察者角色的集合引用作为成员变量,也就是说一个主题角色可以拥有多个观察者。

  3. 抽象观察者角色(Observer):定义了一个接口,声明最为观察者角色应该具备的方法(这个方法是当观察者收到通知后做出的反应,一般就是update)。

  4. 具体观察者角色(Concrete Observer):实现抽象观察者角色,主要是实现接口中的update方法。


5、模式优点

  观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,是他们能够自动更新自己。(也叫做 发布-订阅模式)    观察者所做的工作其实就是解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响另一边的变化。


6、与类似模式比较

  观察者模式是我们最常使用的设计模式之一,尤其是jQuery前端时,对于事件的注册都是观察者模式的一个淋漓尽致的体现。    观察者和其他模式的比较,感觉差距很大。




转载于:https://my.oschina.net/heweipo/blog/466249

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取 子文件夹 后缀_CSDN学院第一个Ptython Homework-- 递归统计文件夹大小

作业:通过第一周学习的内容,自主编写一个py文件,能够递归文件夹大小,并将统计后的大小进行格式化输出.作业体现形式:以代码的方式保存成后缀为py的脚本.作业的注意事项:1.文件名命名规范.2.注释清晰.3.运行结果符合预期效果 .思路提示:1.使用python内置的os模块来进行文件相关的…

android bitmap drawable 互转

引用: http://www.android123.com.cn/kaifafaq/704.html 很多开发者表示,不知道Android的Drawable和Bitmap之间如何相关转换。下面Android123给大家两种比较简单高效的方法。 一、Bitmap转Drawable Bitmap bmxxx; //xxx根据你的情况获取 BitmapDrawabl…

java 链表逆序 递归,java用递归和非递归实现链表逆序

传统的逆序链表方法是使用三个指针来记录节点的状态,防止链表断裂。Node节点public class Node {private int data;private Node next;public Node(int data){this.data data;next null;}public int getData() {return this.data;}public void setData(int data) …

WeihanLi.Npoi 1.21.0 Released

WeihanLi.Npoi 1.21.0 ReleasedIntroWeihanLi.Npoi 是一个基于 netstandard2.0 的一个 NPOI 扩展库,主要用于导入导出 Excel 以及 CSV,支持通过 Fluent API 的方式来支持非常灵活的导入导出配置,详细使用可以参考文档介绍以及项目示例 https:…

史上最硬核老师:17年间,拿着菜刀把400个混混送进了哈佛耶鲁麻省!

全世界只有3.14 % 的人关注了爆炸吧知识今天,来给大家介绍一位硬核教师Jaime Escalante——手握杰斐逊奖、自由精神奖,拿着菜刀把400个混混送进了哈佛耶鲁麻省。海梅斯埃斯卡兰特(Jaime Escalante)初出茅庐1930年12月31日,Jaime出生于玻利维亚…

钱钱语录

1)金钱有一些秘密和规律,要想了解这些秘密和规律,前提条件是,你自己必须真的有这个愿望。 2)如果你只是带着试试看的心态,那么你最后只会以失败而告终,你会一事无成。尝试纯粹是一种借口&#x…

数据库表设计

数据库表设计 分析上述各实体的属性集,从中找出关系的主键,然后用关系式来表示实体(其中下划线的属性为主键)。表4-1至表4-5分别给出了主要表结构各实体的属性如下: 表4-1 admin 表名称 主要字段 数据类型 长度 属性 输入方式 描述 …

大数据财税与python应用_大数据跟python

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

php 类中调用另类,PHP return语句另类用法不止是在函数中,return语句_PHP教程

PHP return语句另类用法不止是在函数中,return语句分享下PHP return语句的另一个作用,在bbPress的代码中看到的一个奇葩使用方法。一直以为,return只能出现在函数中,直到看了bbPress的代码:难道 return 还能出现在函数之外&#x…

抓包写代码模拟怎么减少重复劳动

由于工作需要会经常需要Fiddler抓包Chrome F12抓包然后根据抓包写代码来模拟,一般来说我都是先抓包,打开postman把抓来的包放到postman里面模拟请求然后利用PostMan的生成代码功能大部分的Reponse都是Json,为了方反列化接着要打开一个在线工具…

机械史上最复杂的巅峰之作,这才是最强大脑!

全世界只有3.14 % 的人关注了爆炸吧知识今天我们来认识一下机械史上最强大脑:英国数学家查尔斯巴贝奇,他是可编程计算机的发明者,计算机的先驱。他设计过的计算机器有差分机、分析机和第二个差分机。差分机可谓是机械史最复杂的巅峰之作。在英…

X-Scan描述及简单教程

X-SCAN:在对于被动的防御措施设置情况,对于主动漏洞查找目前根据测定,漏洞扫描软件X-SCAN能够对本机及指定IP主机进行网络扫描,能够完成包括端口服务,脚本漏洞,系统服务漏洞等多种扫描情况。能够准确的查找…

模拟 hihoCoder 1177 顺子

题目传送门 1 /*2 模拟&#xff1a;简单的照着规则做就可以了&#xff0c;把各种情况考虑到&#xff0c;虽然比赛写的丑了点&#xff0c;但能1Y还是很开心的:)3 */4 #include <cstdio>5 #include <cstring>6 #include <iostream>7 #include <algorith…

visual studio toolbox 修复

有时visual studio toolbox 中的控件为灰色无法使用。 解决办法&#xff1a;清除缓存&#xff0c;删除所有tbd文件 win xp下 \Documents and Settings\<user directory>\Local Settings\Application Data\Microsoft\VisualStudio\10.0\*.tbdwin 7下 \Users\<user>\…

mybatis-plus 会自动增加 order by_python自动撸支付宝基金答题红包

python自动撸支付宝基金答题红包背景在一个套利撸羊毛群里&#xff0c;一群小伙伴每天在不懈地撸支付宝的基金红包&#xff0c;于是自己也加入了撸红包大军。于是就重复地在不同的基金里面&#xff0c;看有没有答题红包&#xff0c;有的话就点进去&#xff0c;回答一个及其容易…

C# WPF文本框TextEdit不以科学计数法显示

01—前言一个float或者double类型的数值&#xff0c;如果小数点后0的个数≥4&#xff0c;在界面上就会自动以科学计数法显示&#xff0c;比如&#xff1a;0.00003会显示成这样但是很多时候我并不希望它这样显示&#xff0c;因为这样不方便编辑&#xff0c;和界面其它数据格式也…

php 获取浏览器时区,获取用户时区

噜噜哒这将使您将时区作为PHP变量。我使用jQuery和PHP编写了一个函数。这是经过测试的&#xff0c;而且确实有效&#xff01;在希望将时区作为变量的PHP页面上&#xff0c;在页面顶部附近有以下代码片段&#xff1a;<?php session_start();$timezone $_SESSION[time];…

老布特木糖醇蛋卷鸡蛋味

各种各样的食品都有&#xff0c;丰富的人们的物质生活&#xff0c;同样出现的问题&#xff0c;面临选择的问题&#xff0c;选择食品以健康为根本&#xff0c;再就是食品符合大众口味&#xff0c;老布特木糖醇蛋卷&#xff08;鸡蛋&#xff09;160g采用最新高质量安全技术加工的…

女生说话都是加密的

1 年纪轻轻就能过肩摔普京了&#xff0c;真黑带九段&#xff01;&#xff01;&#xff01;2 第一次知道蒜苔本身是这个样子的。。3 一只来自四川的兔子。。4 不敢自己坐电梯的大宝宝5 去睡沙发吧&#xff01;这里没有你的位置了&#xff01;6 虽然是拒绝但这个回复很棒&#xf…

52Exchange 2010升级到Exchange 2013-升级SH站点Ex2010到2013

20、升级SH站点Ex2010到201320.1 准备Exchange服务器两台前端两台后端的标准架构&#xff0c;准备四台EX2013服务器&#xff0c;已经部署成功&#xff0c;安装方法不再赘述进入到EAC中&#xff0c;可以看到所有EX服务器&#xff0c;包括EX2010和EX201320.2 配置SH-Site前端NLB安…