观察成模式, 什么叫观察者模式呢?观察者模式的话,他也是一种比较常见的,常见的一种设计模式啊,他叫什么呢?他就相当于是那个,呃, 比如说我当前,我当前有个对象啊,我当前有个对象,假设他有一个状态发生了变化,我需要其他的几个东几几个对象都知道啊?就假就就假的这个意思啊,就是我当前有一个对象,他的某一个状态一旦发生了变化,我需要其他的几个对象都知道,能听到这一次吗? 啊?就是我需要其他的几个对象都知道。好,那么这里也就是说这个观察者模式怎么去实现的?那么他首先是需要一个观察者的,观察者的这么一个接口 啊,观察者的他里面可以分观察者和被观察者啊,就是谁观察谁啊?就是被观察者的东西一旦改变,那么我的观察者呢?他里面同样的也需要。呃呃,也需要接收到通知,懂。那什么啊?就是我被观察者的东西一旦改变了,我的观察者也需要能够接收到通知。 好,那么我们来看一下啊,那么首先我们这里是需要一个什么呢?需要一个观察者的接口啊,需要一个观察者的接口啊。好,我们来看一下,我们这里写一个观察者,观察者,那个观察者那个接口的话应该叫什么名字呢?比如说叫叫那个 oppo seven, 应该我没记错的话应该是叫 ope seven。 啊,这个是观察者 啊,观察者好,聊同样的啊,聊同样的,那么观察者里面提供一个方法啊,那么提供一个方法。好,那么就是 over seven 这么一个方法啊, over seven 这么一个方法啊,比如说这个是观察,观察的方法 啊,观察的这么一个方法。好,然后我再去实现各各种各样的一个观察的一个实体,对啊,实体对下啊,比如说发布了一个啊,我这里有一个什么呢?记忆啊,就随便起个名字吧。好,他就实现了一个 oppo seven a plus plus 都没写 g。 一实现 over seven, over seven。 好,他就重写这里面的这个方法啊,还是重写 这里面这个方法。好,这是我的第一个观察者啊,这是我的第一个观察者啊,这里不能是帕贝利克的啊,不能是帕贝利克的,搞错了啊。好,这是第一个观察者,那么他,他这个是什么呢?这个是他的观察对象,比如说一旦那边发生了变化呢?他就要知道这边的这个方法就要被调用,就表示啊,我知道了啊, 啊,就我知道了,都没什么啊,就我知道了。好,然后接下来我们来看一眼啊,那么在这边我再创建一个什么呢?再创建一个那个就是,呃,被观察者的对象啊,被观察者啊,然后被关到的是哪个呢? oppo seven lever 啊, oppo several 啊,这个应该是被观察者, 被观察者,那么被关上的这边他持有一个什么呢?就很简单,他这边持有一个观察者的集合啊,观察者的集合, over silver, 对吧?啊?诶? over silver 啊, over silver, 这是 over silver list, 等于 new 一个 released 啊, new ego or release 选一个套啊, 这就是持有一个被观察者的集合啊,这个是观察者的集合,观察者的集合。好,然后分别提供一些方法啊分别提供一些方法,比如说 poba 的 add。 注册什么呢?注册 oppo seven 啊,注册观察者,这是注册观察者 啊,注册观察者,好,然后我们这里的话,注册观察者的话,就是给他你传一个欧巴社会进来,欧巴社会进来,欧巴社会,好,然后这里的话,然后我这里他点 add, 加入这个欧巴社会的对象, 好,同样的,然后再来移除观察者,会的 remove 啊,移除 oversever, 提供,提供这些方法啊,提供这些方法,移除观察者,然后同样的传一个这个对象进来, 然后把它点 remove。 oppo 色的啊,艺术观察者,好,然后再提供一个方法,模拟事态的改变啊,模拟事态的改变啊, 观察者,啊,好,然后最后再来一个 public 啊,我一个称职啊,假设模拟一个事态的改变啊,好啊,模拟模拟事态,改变啊, 好,假设你做了一些什么事情?假设改变了,好,好,改变了某个属性啊,改变了某个属性啊,改变了某个属性,那么这个时候你要做的呢?是不是把所有的观察者全部拿出来,能听懂这个意思吧?后循环拿出每一个 over, 然后,呃,他拿,再拿一个 list 好,然后再把这每一个观察者干嘛呢?调一下他们的那个通知的这么一个方法啊,这就相当于什么呢?通知每一个,通知每个观察者啊,通知每个观察者啊,好啊,然后这样选手观察者模式就大概就差不多了,然后我们来看一眼啊,然后怎么用的呢?其实很简, 就比如说我当前有一个什么呢?有一个被观察者 over survival, 对吧?他啊,被观察者啊,等于又一个他,这个是一个被观察者啊。好,然后我再一个观察者刚刚写的记一对吧?啊记一等于又一个记一这个是一个观察者 当然如果你想在什么呢想在被观察者状态发生改变的时候能够通知到第一的话那么这个时候你右键一直行现在肯定是不行的。那么我需要干嘛呢?注册观察者可以理解吗? 注册观察者啊注册观察者就是被观察者里面有一个方法叫做 add 就是把这个记忆加进去 能看到这一次吗然后我现在再一次性的时候那么这个时候你改变了以后这个观察者就知道了可以理解吗?如果假设我还有别的一些观察者比如说我还有 g 二 g 三啊这个我还有别的 g 二 g 三啊假设 g 二 g 三啊这是 g 一知道了啊这是 g 二知道了 这是计三字的啊然后呃这里啊计三啊。假设你这里有很多观察者的话啊那么同样的你声明观察者的对象啊计二计三计二计三计二计三那么同样我是全部把它改吗。注册一下 啊就能达到这个效果又减一次性对吧。啊就你只要改变我一个属性。我这边都知道啊这边都知道啊可以理解吗?啊这种就是观察者模式啊这种就是观察者模式啊其实也比较简单而且也比较简单啊。好了啊然后呃最后再稍微来看一个那个就是那种叫什么呢装饰的模式啊就再来看一个装饰的模式。 装饰者模式啊没看到。就是。呃。那个叫什么名字看一下啊。 converse。 好这个 finish finish。 装饰 装饰者装饰者视频模式啊,这种也是一种比较常见的啊这种也是一种比较常见的视频模式啊。那个什么意思呢?就比如说是这样子的啊,假设现在我要实现这么一个功能什么功能呢?就是我要实现一个,嗯,一个女人,对吧?出去逛街的这么一个功能看好啊。 啊,比如说简单,我现在有个物美这么一个类。物美物美对吧?啊?好,它里面就有一个行为很简单无为的。什么行为呢?都说品 购物商品这么一个行为啊少了一个批是吧少了一个批好,那么它这个里面呢就比如说去购物是吧?啊去购物啊去购物好,然后这里报一个错原因是因为 扫了一个括号是吧?扫了一个括号啊,半天没看出来我的天好,那接下来我们来看一下啊。呜门,那你创建这个对象呜门等于又一个呜门好,然后呜门点什么呢?点勾削皮 就表示当前这个人呢他去购物对不对啊?当前这个人他要去购物好,但是呢你看啊女人出去购物他不化妆肯定是不行的,可以理解吧。啊?怎么可能有女人直接就出门出去购物的对不对?肯定先要化妆化两个小时再说对不对?好, 对吧?好,那么这个时候就可以干嘛呢?这个时候当然你可以在这里添加一堆这种化妆的方法,对不对啊?化妆的方法等等。但是呢其实呢我们来看一下好像每个人化妆都大概差不多的是不是?比如说什么拍粉底啊,对吧?或者是什么什么 bb 霜呀,是不是有没有啊好啊就总之总之就这一堆东西吗是不是哎我也不知道干嘛的啊。好然后总是呢 我们看一下啊那么这里我就可以干嘛呢。这个像这种时候呢就可以给他一个装饰的模式啊装饰的模式就是在当前那个基础上来进行一个包装那么我再写一个类这个类叫什么呢这个类叫写个 nice 物们对吧 nice 物们。一个漂亮的女人啊就是一个漂亮的女人。 nice 怎么是耐克我的天。哈哈哈 nice 好啊这是一个漂亮的女人是吧啊漂亮的女人好那么漂亮女人呢这个时候呢也就是本质上来讲呢你还是要把女人给我的懂得是吧啊还是要把女人还是要还是要给我一个女人的啊五本是吧这个构造方法啊构造方法啊构造方法。哎 啊内可无门对吧构造方法好然后这里把它啪把也可以下啊啪把也可以下写错了。然后再持有一个屋门的对象啊持有一个屋门的对象啊。 好你再给我传一个女人进来对吧啊传一个传一个屋门进来然后这是点屋门等于屋门啊这点屋门等于屋门。好同样的他再去实现一个什么呢他再去实现一个他不立刻那种窝里的去什么呢勾削品这个方法啊 他再去实现一个勾销品这个方法但是呢他在勾销品之前呢其实他要干嘛呢先化妆对不对啊先化对吧啊先化半个小时妆是吧 还有吗对吧啊啊然后啊啊啊然后选对吧啊选两个小时衣服是吧 好选两个小时衣服是吧?好然后再去逛街,然后逛街的话,其实呢还是有女人自己去逛街的。屋门点什么呢?点勾小品可以是吧?啊?屋门点勾小品好,然后现在呢就相当于可以达到一个什么效果呢?达到这么一个效果就是我女人,对吧?创建一个女人出来以后,创建一个屋门出来以后呢?我把它包装到这个叫做 nice, nice, 对吧? nice 出门当中啊? nice, 我们当中又一个 nice, 我们另一个 nice, 我们然后帮你把这个物们传进去,然后我拿到的是一个 nice 物们,然后我把这个 nice 物们的点小品。高小品好像也是直接去逛街,但是其实呢,他在去逛街的同时是不是就有了化妆的这个功能? 能看到吗?对吧?这种却是装饰的模式,什么意思呢?就是说在原来的类的同时的基础上是不是给他装饰一些功能,可以理解吗?也就是说我对于我的物美来讲,他的他他他的核心功能是不是去逛街,可以理解吧?他只要他只要负责逛街就好了,然后 我这个 nice 部门呢?他是在干嘛呢?负责先给他化妆以后再让他去逛街,是不是啊? nice 部门就是在部门的基础上先提供一个化妆的功能,然后自己才去逛街,是吧?这就是逛街,这种就是装饰者,就是说在原来的方法之上再提供一些额外的一些功能啊,再提供一些额外的一些功能啊。其实其实大家看一下,我可以把自己剪剪写一下,剪写成这个样子, 其实这个写法大家看起来有没有点眼熟呢?在 iv 流的时候是不是通常能看到这种写法?可以理解吗?比如说你给我一个字节输入流,对不对?打开那个字符输入流,然后我给你包装成一个什么呢?字符缓冲流,然后支付缓冲流以后,我们是不是就有一些额外的功能的,对不对?比如说 reading 等等, 是不是啊?对吧?啊?内容字啊,字母款充的,对吧?就一些 read 认得的。其实他当时用的什么呢?用的就是这种装饰的设计模式,用的就是装饰的设计模式。就在你的基础上,我给你额外的包装一些功能啊,包装一些功能啊,就这样子的啊?啊?他就用的装饰的设计模式啊,是真的, 对吧?就这样子的啊。好啊,其实这个也不是特别的难,当然我们关键是学什么呢?学他的思想,而不是学这个写法的。那什么啊,关键是学思想而不是学写法啊。啊?用法的话其实还有很多啊。
粉丝302获赞1383

一分钟教会你观察者模式 later 欢迎来到新一期的小欧说编程,今天来给大家分享一下观察者模式。首先我们先来了解一下观察者模式的概念,观察者模式指的是有一个主题类,主题类里面维护了一个观察者列表, 当这个主题类发生变化的时候,就会轮循着去通知这些观察者。下面我们就用 up 主和粉丝的关系代码来演示说明一下观察者模式。首先我们先定一个观察者的接口,观察者的接口有一个接收消息的方法, 我们这里面有一个观察者的时间类,他是一个粉丝的类,这个粉丝的类有一个成员变量,标志着这个粉丝的名字,然后他实现了观察者接收消息的方法。然后这里面还有一个 up 主的类,这个 up 主里面有一个观察者的列表,也就是我们的粉丝列表。 观察者一共有如下几个方法,一个是关注的方法,也就是说每当有一个粉丝关注这个 up 主的时候,这个 up 主的粉丝列表里面就会多一个粉丝。如果有一个粉丝取关了这个 up 主,那我们就要在这个粉丝列表里面将这个粉丝给删除掉。每当这个 up 主发布新的作品的时候,关注了这个 up 主的粉丝就会接收到一个推送消息,就会收到这 up 主更新了视频, 我们现在来演示看一下效果。这里面分别有三个粉丝,分别是光头强,熊大还有爱坤,他们分别都关注了这个阿博主小欧。然后当小欧在发布视频的时候,这三个粉丝就会接收到消息,就会接收到新作品的推送,我们现在来调用看一下效果。小欧这里面发布了一个关于鸡米太美的视频, 现在来执行看一下。我们这里面可以看到光头强还有熊大,还有爱坤都收到了小欧发布的经理太美的视频,咱们这里面再演示一下取关,因为前面小欧发布了经理太美的视频,然后爱坤恼羞成怒就取关了小欧。然后我们这里面就调一个取关的接口,将爱坤从那个观察者列表,也就是我们的粉丝列表里面删除。 然后后面小欧又发布了一个新的设计模式的视频,我们现在来调用看一下效果。先清一下, 我们可以看到上面小欧在发布今年在每个视频的时候,爱坤是能收到的,但是后面爱坤进行了取关,小欧在发布设计模式视频的时候,爱坤就收不到了,这个就是观察者模式,你们现在弄懂观察者模式了吗?这个就是本期的分享视频,我们下期再见。 nice。


hello, 各位小伙伴,这一讲要跟大家聊的呢,是观察这个模式啊,那在我们的这个现实世界当中,我们可能很多对象,他其实并不是说能够独立存在的,对吧? 那我一个对象我的行为发生改变,那是不是就有可能会影响到那其他对象的行为也发生改变,对不对?跟大家举个例子啊,比如说我某一种商品,我物价上涨, 那是不是会有一部分商家他会很高兴,对不对?那还有一部分消费者呢,他可能会比较伤心了,因为我可能每天要买的,然后他涨价了,对吧?那还那还有些例子啊,比如说当我们开车的时候,我们开到十字路口,那遇到红灯要停,对不对?那遇到绿灯我们要往前走, 那这种例子协商还有很多啊,比如说股票价格,还有股民公众号、微信用户等等等等啊,那在软件世界当中呢,协商 也是这样的,我们 excel 当中的数据,那跟折线图啊,饼状图啊,跟柱状图他们之间的一个关系,那比如说 mvc 模型成与试图成谈之间的一个关系,那事件模型当中的事件语言和事件处理者的关系, 那所有的这些啊,就说我们用观察者模式,我们来去做的话,那会非常的方便啊。好, ok, 那我们呢就再来看一下观察者模式,它的结构是怎么样的? 好,来看到下面这张图啊,首先第一个就是我们的抽象主题,那抽象主题呢,也就是我们的纱布这个的,也可以把它称为这个抽象目标啊, 那他呢是提供的一个用于去保存这个观察者对象的一个剧集类,然后他的增加删除观察者对象的一些方法。啊,那还有一个作用呢,就是说他能够通知所有 观察者的一个抽象方法。 ok, 然后就是具体主题,那具体主题呢?他也叫做具体的目标类,他主要作用什么?他实现了这个抽象目标的这个通知方法,当具体的主题内部我发生了改变的时候,那我要通知所有的注册过的观察者对象。 ok, 然后呢还有抽象的观察者,那抽象观察者呢?他是一个抽象内,或者说是一个接口,他包含了一个更新自己的这个抽象方法,当我们接到这个要更改的通知的时候,我们可能会被调用。 那具体的观察者呢?他是实现了这个抽象观察者里面定义的一些抽象方法啊,那我们再得到目标,然后更改通知,那他的一些行为呢?就是说当我们收到这个更改通知的时候,我们会更新自己的一个状态。 ok, 这个呢就是说他的一个 结构,那咱们呢就再来去看一下代码啊。好,我们来看到这边的这个代码,第一个是我们的扣端,对吧?扣端就是一些调用,然后来看一下抽象目标,我们也可以把它称为这个抽象主题啊,那它里面呢是有一个观察者角色的一个集合,对吧? 那这个集合里面呢?我可以新增这个观察者,我也能删除这个观察者,然后呢我还有一个方法叫做通知观察者。啊, 啊,这个就是抽象目标,然后再来看看具体的目标啊,那我具体目标呢?我肯定就实现这个通知的方法,对吧?那我在里面我去打印好日志,然后我在循环的一个货循环,我们把里面的 这个 list 集合给他拿出来,然后一个一个的去调用他的通知方法, ok, 然后就是抽象的观察者,抽象观察者里面呢,肯定就是有一个 response, 就是我接收到信号的这个方法,对吧?那我在这个方法里面我需要去做一些我自己的处理嘛?那来看看具体观察者一,观察者二,那我就是在这个 response 里面我去打印一些具体的语句,那也就是说我针对于他的这个通知我要做出的一些反应啊,好,这个呢就是说他的一个代码啊。 啊?那观察者模式我们整体看下来呢?实际上我们怎么样去理解他呢?就是说他指的是我们多个对象之间,那是不是可能会存在一个一对多的一个依赖关系, 对吧?那假设我发生了一个变化,那所有依赖我的这些对象,我们是不是要告诉他们,对吧?然后让他们去做一些更新的操作?那这个模式实际上也被称为什么发布订阅模型啊?那或者说是那模型试图 模式,那他呢?实际上是对象行为模式当中的一种啊?啊? ok, 那他有什么样的优点呢?首先他降低了目标跟观察者之间的偶和程度,两者之间是抽象偶和关系,对吧?那这个是符合什么依赖导致原则?实际上我们可以去想象一下,就说如果没有这种观察者的话,那我要通知我是不是得, 那在我自己发生改变的时候,我要一个一个给他们找出来,找出来之后呢,我要一个一个的去告诉他们,对吧?那这个实际上偶合性是很高的。好,那第二个呢,是目标跟观察者之间,他们是建立了一套处罚机制的,也就是我只需要发一个通知, 那他们所有的订阅我的人,他们都会接到这个通知,这个呢也是一套触发机制啊。好,那聊完了优点再聊聊缺点啊,那缺点呢?实际上目标跟观察者之间的依赖关系,他并没有完全解除,对不对?那假设我们 在这个具体目标这里,对吧?我调用了 response, 但是这个 response 里面,他如果调用的这个通知方法的话,那是不是会导致一个问题,就是循环引用,对不对啊?那第二个就是当观察手对象很多的时候, 首先我们在这是用负循环实现的,那他就有可能会花费很多的时间啊,就我一,我要一遍一遍的通知下去,那也会影响程序的效率啊。好,那这个呢,就是观察者模式啊。那本讲内容呢?咱们聊到这就结束了,咱们就下一讲,再见。

这节讲一下观察者模式,他就叫发布订阅模式,他属于行为性模式,行为性模式关注的是对象间的通讯。我们以一个经典面题为例, 题目是猫大叫一声,所有的老鼠都开始逃跑,主人被叫醒。要求一要联动性,老鼠和人的行为是被动的。二、考虑和扩展猫叫声可能会引起其他联动效应。我们简单分一下这道题目里面有三个角色,猫、老鼠和主人,他们都有各自的行为。 嗯,要求有联动性,说明他们的行为会依次发生,然后老鼠和人是被动的,说明猫叫会主动触发老鼠和主人的行为。 二、要求可扩展,那么我们要面向于抽象,或者面向于接口,然后猫叫可能会引起其他联动效应。所以说猫需要动态维护这种依赖关系。 也就是说,这个题目里面,老鼠和主人是观察者,而猫是被观察者,当被观察者行为发生变化时,会主动给观察者发通知,然后观察者行为也会发生行为变化。下面我们看一下代码实现。 首先我们定一个抽象观察者,他有个抽象行为,一个抽象类和一个抽象方法。然后老鼠是一个具体观察者,他有自己的行为,然后当接收到通知时,他会发生行为变化,他要继承这个抽象抽象观察者。 然后人也是一个具体的观察者,他有自己的行为,然后当接收到通知,他会发生行为变化,他也要继承这个抽象观察者。嗯,下面我们再声明一个抽象被观察者,因为 因为被观察者需要动态的维护,观察者集合,所以我们需要定一个观察者集合,然后他可以动态的增加观察者,动态的移除观察者,然后他需要给观察者发通知,通过便利集合的形式给每个观察者发通知, 这是抽枪的被观察者,然后猫是一个具体的被观察者,当猫叫时他有自己的行为,猫叫时会给观察者发通知, 然后我们看一下运用定一个猫,然后猫可以动态的增加观察者,老鼠和人猫叫时会给 观察者发通知,这就是理想情况下观察者模式的实现。然后我们可以为什么说,为什么说是理想情况下呢? 可以看一下像这种实现,观察者必须是抽象观察者,抽象观察者的子类,嗯,这在我们现实代码当中,现实业务当中有可能是不现实的,像这种情况就是无形中加了一些约束 啊。下面我们升级一下,我们运用试驾委托形式来解决这种问题。 首先我们就需要声明一个委托,声明一个委托,然后什么是委托呢?委托可以看到是对方法的抽象,简单的说委托是方法,委托是方法的累,而方法是他的实力。 嗯,委托一旦分配了方法,委托就会具有与方法相同的行为。可委托 可以有具体参数,也可以有返回纸,我们这里定义这个委托是没有参数,没有返回纸。然后我们运用这是一个猫,然后上面一个事件,它的类型是委托这个委托类型, 然后当猫叫时会触发这个事件,因为事件可以搭载方法,我们下面看一下如何去搭载搭载方法,然后这也是我们的运用,定一个猫,一个老鼠,一个人, 然后猫这个猫里面这个事件可以搭载,方法可以这么写,也可以这么写,这是两种写法都可以。嗯,委托可以搭载很多方法,当事件被触发时,因为事 事件是委托吗?当事件被触发时,所有的方法会依次被唤醒。第二点是委托,但是他有个限制,就是委托对象所搭载的方法 是无残留无返回制,他也是无残留无返回制。委托对象所搭载的方法必须具有相同的圆形和形式,也就是说必须具有相同的参数列表 和相同的反馈值,这样才能被搭在一起。然后当事件被触发时,这些方法被依次被唤醒。 那这种形式就是解决了刚才那种问题,没有必要都去实现那个抽象观察者。然后但是他也有一些限制,就是他 所搭载的话必须具有相同的原型和形式。嗯,这也就是灌篮的模式不足的地方。下面我们总结一下 观察者模式,他的意图是定义对象间的一种一对多的依赖关系,当一个对象状态发生变化时,所有依赖依赖于他的对象 都将得到通知,并且更并且自动更新。他是实现了对象依赖关系的结偶,并且保保证了依赖关系的高度协作。他的应用场景是,当一个对象状态发生变化时,所有依赖于他的对象都将得到通知,进行广播通知。 哎,比如说我们购买一个商品的时候,购买商品需要加订单减库存扣款,像这种情况,购买订单就是 被观察者,那购买商品就是被观察者,而加订单减库存扣款,相当于观察者,他们的动作会一些,会也会依次发生啊,这时候我们可以用观察者模式,那么观察者模式他的优点是观察者与被观察者抽象是偶合的,也就是, 呃,对,对这种依赖关系进行结偶。然后第二个优点是易扩,易扩展,有时候我们可以动态的去维护。嗯,观察者与被观察者, 然后他的缺点是多个观者需要有相同的原型和形式,有绝缘型,这也是我们刚才所说的。然后第二就是 对象如果是循环依赖的话,可能会造成系统崩溃,这时我们应用观察者模式时候需要注意一下啊,以上这些就是观察者模式。

观察者模式,也称为发布订阅模式,允许多个对象订阅由另一个对象广播的事件,这是一对多的关系。在现实生活中,你可能有一个发射信号的无线电塔。在程序开发中,例如 fairbase 采用的就是观察者模式。 当服务器上的数据发生变化时,所有订阅的客户端都会收到通知并自动更新为最新数据。在此处的代码中,我将引入 rxgs 来演示观察者模式。他提供了一个 subject 类,用来广播内容, 并且我们可以向他添加多个订阅。 subject 将跟踪这些订阅,并且在数据发生变化时调用其回调函数。在我们的手机上,很多 f 几乎都拥有此类的功能。例如,你的关注和点赞,我就会收到相关的通知一样。点加号,点红心,点箭头。

大家好,今天我们来学习设计模式模式之观察者模式。那么什么是观察者模式呢?是一种行为型设计模式,他定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。 何时使用一个对象目标对象的状态发生改变,所有的依赖对象、观察者对象都将得到通知,进行广播通知。 优点一,观察者和被观察者是抽象偶合的。二,建立一套触发机制。缺点一,如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。二,如果在观察者 和观察目标之间有循环依赖的话,观察目标会触发他们之间进行循环调用,可能导致系统崩溃。三,观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。 下面我们来看看实力代码,创建 observer 一类,创建 subject 类,创建实体观察者类,使用 subject 和实体观察者对象 执行程序,看看控制台输出结果。注意事项一, java 中已经有了对观察者模式的支持类二,避免循环引用。 三,如果顺序执行某一观察者错误会导致系统卡壳,一般采用一步方式。那么我们今天观察者模式学习就到这里了,谢谢大家。



今天来给大家说说我的世界中那些强大的指令。先来说说几个实用的 amod 三、旁观者模式,其中旁观者模式可以附身到很多怪物身上,还是很奇妙的,大家可以试试哦!

一个工作了五年的粉丝去字节跳动面试,在第一面的时候遇到这样一个问题,请你介绍一下策略模式和观察者模式。这个粉丝遇到这个问题的时候,突然思路就断掉了,他不知道从哪个点去回答这个问题, 他要是早点看到我这个视频,估计就已经拿到了 offer。 经常有同学在后台跟我吐槽,在求职过程中遇到各种各样非常刁钻和难的面试题。 我发现大部分的问题呢,在我之前的视频里面都有分析过,考虑到之前的视频呢太多了,有点分散,所以大家学习起来会比较费劲。因此呢,我整理了一份二十万字的面试文档,有需要的小伙伴可以在我的主页去领取。 在家外里面有二十三种数学模式,而在实际开发工中用到的数学模式是屈指可数的。主要有两个方面的原因,第一个,目前的开发模式主要基本上是按照 mv 替这一套再搞,大部分业务逻辑的实现都不复杂。第二,对于设计模式理解不够,只能生搬硬套,不仅仅没有带来好处,还让程序处理变得更加麻烦。但是设计模式确实是无数前辈在软件开发过程中总结的一些经验, 能够使得程序更加灵活可扩展。有人把它总结成了公式化的二十三种设计模式,导致大家以为按照这个公式去搬运就可以了。 但实际上,我认为设计模式应该是一种软件设计的思想或者方法论,它不应该是固化或者某一种特定的公式,它的运用应该更加灵活,相信大家可以在很多的开源框架的原码里面可以看到它的一些灵活运用。这二十三组设计模式呢,可以分为三种类型,分别是创建型、结构型和行为型。 策略模式和观察的模式呢,都属于行为型模式,行为型模式主要是用来描述多个类和对象之间的相互协同,完 成单个对象无法单独完成任务。除了这两种以外,还包括像模板方法、状态模式、责任模式、解释器模式等等。下面我们来看一看高手的回答。 策略模式和观察的模式都属于行为模式。策略模式主要是用在根据上下文动态去控制类的行为的一个场景,一方面可以解决多个 eos 判断带来的代码复杂性和维护性的一个问题, 另外一个方面,把类的不同行为进行封装,使得程序可以进行动态的扩展和替换,增加了程序的灵活性。 比如像支付路由这样一个场景就可以使用策略模式来实现。观察的模式主要是用在一对多的对象依赖关系的一个处理过程中,实现某一个对象状态变更之后的感知的一个场景。一方面呢,可以降低对象依赖关系的偶和度,弱化依赖关系。另外一个方面,通过这种状态的通 机制啊,可以保证这种依赖对象之间的状态协同。在 spring 原码里面有大量运用到这种观察者模式来实现事件的传播和感知。以上就是我的理解, 要想真正理解设计模式的精髓,并且能够灵活运用,需要多去阅读一些优秀框架的原码,比如 spring, 否则啊,设计模式永远只会停留在纸上谈兵。好了,今天的视频呢,就到这结束了,喜欢我作品的小伙伴记得转发、收藏和点赞,我是麦克,咱们下期再见。