设计模式——————观察者模式
工厂模式分为简单工厂,工厂和抽象工厂,三种工厂的实现是越来越复杂的。
观察者模式
本质上就是一种订阅/发布的模型,从逻辑上来说就是一对多的依赖关系。
什么意思呢?好比是一群守卫盯着一个囚犯,只要囚犯一有异动,守卫就必须马上采取行动(也有可能是更新状态,本质上也是一种行动),那么守卫就是观察者,囚犯就是被观察者。
解决的问题:
在系统中,实现这种一对多的而且之间有一定关联的逻辑的时候,由于需要保持他们之间的协同关系,所以最简便的方法是采用紧耦合。但是这样加大了开发难度,很容易造成Bug
观察者模式就解决了这么一个问题,在保持一系列观察者和被观察者对象协同工作的同时,把之间解耦了。
意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。
何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。
如何解决:使用面向对象技术,可以将这种依赖关系弱化。
关键代码:在抽象类里有一个 ArrayList 存放观察者们。
应用实例: 1、京东上某个商品暂时没货,提示用户关注后到货通知,这个暂时无货的商品是被观察者,点击关注这个商品的用户就是观察者。 2、老师针对成绩在60分以下的同学定期发送最新的考题分析邮件,每轮考试下来都会有不及格的同学,由不及格变为及格的同学自动从邮件列表里移除,新的不及格的同学会被加进邮件列表里。
优点: 1、观察者和被观察者是抽象耦合的。 2、建立一套触发机制。
缺点: 1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。 2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。 3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。
使用场景: 1、有多个子类共有的方法,且逻辑相同。 2、重要的、复杂的方法,可以考虑作为模板方法。
转载于:https://www.cnblogs.com/FMOON/p/8934079.html
设计模式——————观察者模式相关推荐
- Python设计模式-观察者模式
Python设计模式-观察者模式 代码基于3.5.2,代码如下; #coding:utf-8 # 观察者设计模式class observerInterface():def update(self,va ...
- [Head First设计模式]山西面馆中的设计模式——观察者模式
原文:[Head First设计模式]山西面馆中的设计模式--观察者模式 系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 引言 不知不自觉又将设计模式融入生活了,吃个饭也 ...
- java设计模式--观察者模式(Observer)
java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...
- 【学习笔记】ABAP OOD设计模式 - 观察者模式
ABAP OOD设计模式 - 观察者模式 整理转自-<SAP ABAP 面向对象程序设计(原则.模式及实践)> 定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,这个对象相关依赖的 ...
- Java设计模式-观察者模式(订阅发布模式)
Java设计模式-观察者模式(订阅发布模式) 一起来看 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一起坚持吧!! ...
- 设计模式---观察者模式介绍与理解
设计模式---观察者模式介绍与理解: 观察者模式原理:类似于定牛奶业务 1. 奶站,subject:登记注册,移除,通知(register,remove,notify) 2. 用户,observer: ...
- 设计模式-观察者模式 发布/订阅模式
设计模式-观察者模式 发布/订阅模式 代码 观察者接口 public interface IHanFeiZi{// 当吃早饭时public void havBreakFast();// 进行娱乐活动时 ...
- 设计模式 | 观察者模式及典型应用
本文主要内容: 介绍观察者模式 微信公众号的发布/订阅示例 观察者模式总结 分析观察者模式的典型应用 JDK 提供的观察者接口中的观察者模式 Guava EventBus 中的观察者模式 JDK 委托 ...
- 李建忠设计模式——观察者模式
1.观察者模式(Observer/Event) 1.动机 在软件构建过程中,需要为某些对象建立一种"通知依赖关系"--一个对象(目标)的状态发生改变,所有的依赖对象(观察者对象)都 ...
- 设计模式●观察者模式
设计模式●观察者模式 观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新.观察者模式又叫做发布-订阅( ...
最新文章
- C++11中std::shared_future的使用
- 用中值排序基数法实现树状结构 (转)
- AXI总线基本知识:(基于uart_lite IP核)
- phoenix 开发API系列 目录
- C语言再学习 -- 输入/输出
- 第一章 计算机、程序和Java概述 复习题 解答
- SpringCloud Ribbon(一)之自定义负载均衡器ILoadBalancer
- 工作流实战_13_flowable 待办任务列表查询
- matlab中evrnd函数_【matlab】Matlab中产生正态分布随机数的函数normrnd
- 在SQL Server中设置最大并行度的不同方法
- element ui中动态合并单元格_element ui单元格的动态合并
- Redis设计与实现-监视器
- 关于里程碑图 2017.01
- VScode+esp-idf:编译腾讯物联网控制台ESP32例程(esp-qcloud)
- 内存模型系列(下)- 内存持久性模型(Memory Persistency)
- 喜欢计算机专业的理由英语作文,计算机专业英文自我评价范文
- 微信公众平台开发[1] —— 获取用户Openid及个人信息
- 2022-2028全球与中国医学头骨CT市场现状及未来发展趋势
- 计算机储存文档丢失怎么找,电脑文件丢失如何找回,文件数据丢失恢复方法
- redis安装(保姆级别)
热门文章
- 全国计算机等级考试题库二级C操作题100套(第33套)
- python中hashmap的方法_如何为Java的HashMap模拟Python的dict的“ items(...
- java 注解数组初始化_Java 之 注解的定义
- 线程可见性和关键字volatile
- Spring系列(三):@ComponentScan注解用法介绍
- oracle po:默认申请分组,PR自动创建PO采购订单:强制按照PR行进行分组
- java replaceall 大小写_Java replaceAll不区分大小写
- html优美界面左侧下拉,一组时尚的侧边栏菜单和下拉列表UI设计
- ORACLE会话以及SQL执行信息查询
- 【kafka】 windows平台搭建及使用