本文出自 http://blog.csdn.net/shuangde800
认识观察者模式
我们先看看报纸和杂志的订阅是怎么回事:
1、报社出版报纸
2、你向某家报社订阅报纸,只要他们有新报纸出版,机会给你送来。只要你是他们的订户,你就会一直收到报纸
3、当你不想再看报纸时,可以取消订阅,他们就不会再送新报纸来。
4、只要报社还在运营,就会一直有人向他们订阅报纸或者取消报纸。
出版者 +订阅者 = 观察者模式
如果你了解报纸的订阅怎么回事,其实就知道观察者模式是怎么回事,只是名称不太一样:出版者改称为“主题”(Subject),订阅者改称为“观察者”(Observer)
定义观察者模式
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到并自动更新。
观察者模式类图:
设计原则
为了交互对象之间的松耦合设计而努力
松耦合的设计之所以能让我们建立有弹性的OO系统,能够应对变化,是因为对象之间的互相依赖降到了最低。
观察者模式涉及到的设计原则
原则1:找出程序中的变化方面,然后将其和固定不变的方面相分离
在观察者模式中,会改变的是主题的状态,以及观察者的数目和类型。用这个模式,你可以改变依赖于主题状态的对象,但不必改变主题。这就叫提前规划!
原则2:针对接口编程,不针对实现编程
主题与观察者都是使用接口:观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。这样可以让两者之间运作正常,又同时具有松耦合的优点。
原则3:多用组合,少用继承
观察者模式利用“组合”将许多观察者组合进主题中,对象之间的这种关系不是通过继承产生的,而是在运行时利用组合的方式而产生的。
相关推荐
springboot项目基于协同过滤算法的私人诊所管理系统_to,含有完整的源码和报告文档
图表分类ppt
09-办公人物信息可编辑PPT图表
推送早安问候以及天气预报
西门子1200PLC博图自动称重配料系统程序例程,组态画面采用KTP1200触摸屏。 具体为1200和变频器Modbus RTU 通 讯,托利多电子称modbus RTU通讯,带 PID 温度控制程序。 变频器参数 Modbus通讯说明 CAD电气图纸 硬件组态过程有内部教案等项目文件,程序打开软件版本TIA V14及以上
S7-200 PLC和组态王物分拣快递分拣分选包裹 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面
图表分类ppt
图表分类ppt
图表分类ppt
springboot项目基于 html 的图书管理系统,含有完整的源码和报告文档
苍鹰优化算法NGO优化BP神经网络的软值和阈值参数做多输入单输出的分类建模。 程序内注释详细直接替数据就可以使用。 程序语言为matlab。 程序直接运行可以出分类图,迭代优化图,ROC图。
资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
GoPay.rar,GoPay.rar,GoPay.rar
该资源内项目源码是个人的课程设计、毕业设计,包含论文,拿来就能用的,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
图表分类ppt
springboot项目基于SpringBoot+Vue疫情物资捐赠和分配系统,含有完整的源码和报告文档
图表分类ppt
分布式电源选址定容,储能选址定容。 matlab程序 粒子群(考虑时序与不考虑)、改进灰狼(考虑时序):以总网损最低或电压偏差最低为目标函数。 多目标粒子群:网损和电压。 IEEE69节点系统为例(matpower进行潮流计算,可其他节点,可改分布式电源数据例子为3个分布式电源),对比接入前后电压、网损变化,迭代曲线图。
基于 Python 和 Django 的豆瓣电影数
项目资源包含:可运行源码+sql文件+文档 源码都是精心调试,有文档,可以部署,有费用,谢谢支持。 适用人群:学习不同技术领域的小白或进阶学习者;可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 项目具有较高的学习借鉴价值,也可拿来修改、二次开发。 有任何使用上的问题,欢迎随时与博主沟通,博主看到后会第一时间及时解答。 开发语言:Java 框架:SpringBoot 技术:Vue JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 系统是一个很好的项目,结合了后端服务(SpringBoot)和前端用户界面(Vue.js)技术,实现了前后端分离。