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

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

观察者模式原理:类似于定牛奶业务

1. 奶站,subject:登记注册,移除,通知(register,remove,notify)

2. 用户,observer:接收输入

观察者模式:对象之间多对一依赖的一种设计模式,被依赖的对象称为subject,依赖的对象为observer,subject发生变化时通知observer对象。

观察者模式实例演示:

Java内置观察者:

Observable(类而非接口):已经实现了:注册移除通知。不能多重继承。(在通知之前要setChanged())

 

 

Observer(接口)这样才能多重实现

观察者模式关键点:

1. 松耦合:对象之间的关系应该是松耦合。对象之间交互的过程属于松耦合状态,可以相互交互,但是交互的过程中,相互之间不存在依赖关系。

他们之间是异步的,比如说:不需要对方传递过来的对象具体是怎么实现的。(观察者模式)Observer和Subject之间互不影响,其中一个崩溃不影响另外一个的正常工作。

2. 高内聚:对象内部之间的关系应该是高内聚的。

3. 隔离影响:发生错误或者的异常的时候降低影响。

 

从观察到通知的转变:

Observer本来的意思叫做观察者,但实际上Observer角色并不是主动的去观察,而是被动的接收来自subject角色的通知。因此,Observer模式也被称为publish-subscribe模式(发布-订阅模式)

Demo请参考:https://github.com/linhj-james/DesignPattern

 

转载请注明出处!

 

 

 

 

 

 

 

 

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

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

相关文章

CRS-4995: The command ‘start resource’ is invalid in crsctl.

ntp时间调整后,节点1,advm 和acfs offline 处理办法: /u01/app/12.2.0.1/grid/bin/crsctl stop crs /u01/app/12.2.0.1/grid/bin/crsctl start crs 曾经尝试如下命令不起作用 /u01/app/12.2.0.1/grid/bin/acfsload start /u01/app/12.2…

抽象工厂模式升级版————泛型化实现

引言 今天回看之前总结的抽象工厂模式的实现《Java常用设计模式————抽象工厂模式》,聚焦于抽象工厂模式的缺点,试着改进了一下。 回顾一下抽象工厂模式的缺点: 在添加新的产品类型时,难以扩展抽象工厂来生产新种类的产品。…

发生在“注解”@的那些事儿

注解: 自定义注解: 注解和类,接口一样,属于一种数据类型 注解可以放在类,方法,属性上面 注解可以有属性,也可以没有属性 注解有作用范围 ( 源码期间(String&#…

Java常用设计模式————建造者模式

引言 建造者模式(Builder Pattern)使用多个简单对象一步一步构建成一个复杂的对象。这种类型的设计模式属于建造型模式,它提供了一种创建对象的最佳方式。 一个Builder会一步步构建最终的对象。该Builder类是独立于其他对象的。 实现概要 …

使用动态代理解决网站字符集编码问题:(之前通过拦截器)

使用动态代理解决网站字符集编码问题:(之前通过拦截器) 设计模式: 在软件开发的过程中,遇到相识的问题,将问题的解决方式抽象为模型(套路) 单例模式(静态代码只会执行一…

设计模式---简单工厂设计模式

先定义一个抽象类Animal: 定义两个动物类继承这个类: 定义一个专门生产动物的工程类: 最后定义一个测试类: 按照这个动物工厂类,你会发现,如果动物一多的话,就需要写很多重复的方法,…

Java 多线程 —— ThreadLocal

一、引言 ThreadLocal是Java帮助实现线程封闭性的典型手段。 作用:提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量的传递复杂度。同时也用来维护线程中的变量不被其他线程干扰。 …

设计模式---适配器设计模式

设计模式---适配器设计模式 什么事适配器: 1. 在使用监听的时候,需要定义一个类事件监听器接口 2. 通常接口中有多个方法,而程序中不一定所有的方法都用到,但又必须重写,很繁琐 3. 适配器简化了这些操作&#xff0c…

Java并发编程实战————售票问题

引言 现有一个需求如下: 有10000张火车票,每张票都有一个编号,同时有10个窗口对外售票,如何确保车票的正常售卖? 程序一:使用List 问题的解决办法都是从我们最最熟悉的角度思考。程序一,我们…

多线程相关知识

多线程相关知识 两个线程进行通信:通过等待(wait)唤醒(notify)机制 三个或三个以上线程进行通信:通过notifyAll()方法 /* * 1. 在同步代码块中,用哪个对象锁&#xff0c…

Eclipse集成PyDev5.2.0开发插件

引言 在进行Python学习的时候,希望不使用IDLE进行开发,但是其他的IDE如PyCharm可能需要一段短暂时间的上手,因为开发过Java,所以使用能够集成到Eclipse上的PyDev插件进行开发应该会好一些。 但是在安装PyDev的时候发生了一些问题…

PostMan 四种常见的 POST 提交数据方式

HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式。 协议规定 POST 提交的数据必须放在消息主体(entity-body&#xff0…

史上最真实行业鄙视链

本文转载自菜鸟教程的微信公众号,原文链接:https://mp.weixin.qq.com/s/d9cdtq8y4Msq-_ZNof-iuw 引言 作为程序员的一份子,掌握好各个生态系统中的鄙视链,可以写出更加符合改变世界要求的代码。掌握了鄙视链,就掌握了…

权限验证框架Shiro

权限验证框架Shiro: Shiro简介 什么是Shiro: shiro是一个强大易用的Java安全框架,提供了认证,授权,加密,回话管理等功能; 认证(Authentication):用户身份识别…

Mybatis从入门到精通上篇

Mybatis从入门到精通上篇: 学习过的持久层框架:DBUtils , Hibernate Mybatis就是类似于hibernate的orm持久层框架。 Mybatis介绍: Mybatis是面向sql的持久层框架,他封装了jdbc访问数据库的过程,我们开发,只…

Eclipse使用————Working Set工作集

引言 经常看到在设置项目的时候,如导入项目,新建项目等看到对话框的下方有一个“add to working set”复选框,为了弄清这个working set,我们就来好好了解一下Eclipse 的working set功能。 Working Set? Eclipse中通…

Mybatis从入门到精通下篇

Mybatis从入门到精通下篇: 输入类型: 输出类型: ResultMap: 动态sql: if标签: where标签: sql片段: foreach标签: 关联查询: 以订单作为主体: 一…

爱上进制转换练习

引言 对于可能接触到通讯行业或是物联网的开发工作者,一般会面对十进制、二进制、十六进制的转换工作,不仅仅是体现在代码上,有时候也需要用肉眼来进行快速的转化,以获取协议指令中的信息。 今天通过简单的整理,特此…

Sprint Boot————@Qualifier、@Primary

引言 使用Autowired自动注入时: 如果注入的接口有多个实现类,如下所示: 那么如果不指定具体是哪个实现类的Bean,在Spring Boot启动时就会发生异常(下图请点击查看): 异常的描述信息非常简单&am…

SpringMVC教程上篇

SpringMVC教程上篇 SpringMVC优势: SpringMVC代码执行流程: 框架结构: 架构流程: 组件说明: SpringMVC与Mybatis整合 ! 效果: 开发流程: