责任编辑是后端观念时评的棒果哈,我的整座后端观念时评都是跟日常生活组织工作有关的哈。那时跟我们谈谈甚么是观测者商业模式,怎样应用领域到组织工作实践中,和怎样抽出两个观测者模版。

观测者商业模式表述

观测者商业模式的应用领域情景

怎样同时实现两个单纯的观测者商业模式

组织工作中,怎样采用观测者商业模式的

Spring观测者商业模式基本原理

如前所述spring观测者商业模式,抽出两个通用型模版

成天几句话,归纳呵呵

1. 观测者商业模式表述

观测者商业模式,也能称作正式发布订户商业模式,它在GoF 的《设计商业模式》中,是那么表述的:

Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically。

译者回来是:观测者商业模式表述第一类间的一类两对多的倚赖亲密关系,当两个第一类的状况出现出现改变时,大部份倚赖于它的第一类都获得通告并被顺利完成销售业务的预览

观测者商业模式归属于犯罪行为商业模式,两个第一类(被观测者)的状况出现出现改变,大部份的倚赖第一类(观测者第一类)都将获得通告,展开该台通告。它的主要就核心成员是观测者和被观测者

被观测者(Observerable):最终目标第一类,状况出现变化时,将通告大部份的观测者。

观测者(observer):接受被观测者的状况变化通告,执行预先表述的销售业务。

2. 观测者商业模式的应用领域情景

哪些情景我们能考虑采用观测者商业模式呢?

我们日常生活生活中,其实就有观测者商业模式类似的例子。比如,我们订户了报社一年的报纸。每天报社印刷好报纸,就送到我们手中。我们是观测者,报社是被观测者。

而日常生活开发中,观测者商业模式的采用情景主要就表现在:顺利完成一件事情后,通告处理某个逻辑。如,登陆成功发个IM消息支付成功发个邮件消息或者发个抽奖消息用户评论成功给他发个积分等等。

举个详细点的例子吧,登陆注册应该是最常见的销售业务情景了,我们就拿注册来说事,我们经常会遇到类似的情景,是用户注册成功后,我们给用户发一条消息,又或者发个邮件等等,因此经常有如下的代码:

这块代码会有甚么问题呢?如果产品又加需求:现在注册成功的用户,再给用户发一条短信通告。于是你又得改方法的代码了。。。这是不是违反了开闭原则啦。

并且,如果调发短信的接口失败了,是不是又影响到用户注册了?!这时候,是不是得加个异步方法,异步发通告消息才好??其实这种情景,我们能采用异步非阻塞的观测者商业模式优化的。

3. 怎样同时实现两个单纯的观测者商业模式

我们先来看下,单纯的观测者商业模式怎样同时实现。能那么表述

两个主题接口(声明添加、删除、通告观测者方法)

两个观测者接口

两个创建主题的类(即被观测者),同时实现了接口

各个观测者的差异化同时实现

为了通俗易懂,能这样理解观测者商业模式:是被观测者()做了一件事情,或者说正式发布了两个主题(),然后这件事情通告到各个有关的不同的人(不同的观测者,的差异化同时实现者)。

两个主题接口

两个接口

两个创建主题的类(即被观测者),同时有观测者列表的属性(其实是说观测者要事先注册到被观测者)

观测者的差异化同时实现,和采用

就这样,我们同时实现了观测者商业模式啦,是不是很单纯?不过上面的代码,只能算是观测者商业模式的模版代码,只能反映大体的设计思路。接下来,我们看下在组织工作中,是怎样采用观测者商业模式的。

4. 组织工作中,怎样采用观测者商业模式的

观测者商业模式的同时实现有两种方式,同步阻塞方式和异步非阻塞方式。第3小节是两个同步阻塞方式的观测者商业模式。我们来看下,日常生活组织工作的例子:用户注册成功发消息的例子,怎样同时实现。本小节分同步阻塞、异步阻塞、spring观测者商业模式三个方向探讨。

同步阻塞方式的观察商业模式

异步非阻塞方式的观测者商业模式

spring观测者商业模式应用领域

4.1 同步阻塞方式的观察商业模式

我们能把用户注册,当做被观测者同时实现的逻辑,然后发消息观测者的同时实现逻辑

假设有两个观测者,分 别是发QQ消息和手机消息,于是有以下代码:

直接能通过的,初始化观测者列表,然后用户注册成功,通告观测者即可。代码如下:

能发现,观测者商业模式,是将不同的犯罪行为代码解耦,也是说将观测者和被观测者代码解耦。但是这里我们会发现,这是同步阻塞式的观测者商业模式,是有缺点的,比如发QQ消息异常,就会影响用户注册,或者发消息因为某些原因耗时,就影响了用户注册,所以能考虑异步非阻塞的观测者商业模式。

4.2 异步非阻塞方式的观测者商业模式

怎样同时实现异步非阻塞,最单纯是另开个线程嘛,即新开个线程或者线程池异步跑观测者通告。代码如下:

线程池同时实现的异步非阻塞方式,还是能的,但是异步执行逻辑都耦合在了中,不是很优雅,也增加了这部分销售业务代码的维护成本。一般日常生活组织工作中,我们会用那一套观测者商业模式等

4.3 spring观测者商业模式应用领域

spring的观测者商业模式采用也是比较单纯的,是先表述个事件,继承于:

然后表述两个事件监听器,类似于观测者,它同时实现接口

用户注册成功后,(类似于被观测者)正式发布事件即可,代码如下:

运行结果:

这个也是同步阻塞的方式同时实现的,等下下个小节先介绍完观测者商业模式的基本原理,蛤蜊哥再来教我们怎样抽出两个通用型的异步非阻塞观测者商业模式哈。

5. Spring观测者商业模式基本原理

Spring 中同时实现的观测者商业模式包含三部分:分别是事件(相当于消息)、监听者(相当于观测者)、发送者(相当于被观测者)。用个图表示是这样:

这个是放到哪里的,监听者是怎样监听到的。接下来,我们来看下spring框架的观测者基本原理是怎样哈~

我们先来看下源代码(被观测者/正式发布者

它只是两个函数式接口,我们再看下它接口方法的同时实现。它的具体同时实现类是,这个类代码有点多,我把关键部分代码贴出来了:

通过以上代码,我们能发现,真正的消息发送,实际上是通过事件该台器这个接口来顺利完成的。是主要就方法,这个方法的同时实现在类中,我们一起来看下源码:

能发现,默认情况下,spring同时实现的观测者商业模式,同步阻塞的。如果想异步执行事件,能自表述,然后构造呵呵线程池就好啦。代码如下:

demo跑呵呵,运行结果:

如果手动新建,并设置的话,大部份的监听响应事件,都是异步执行的哦。而有些有些情景我们希望同步执行的,这时候这种同时实现方式就不好了。

其实提供了注解,能用来同时实现异步。具体怎么同时实现呢?其实很单纯,只需要在配置类加上,接着在需要异步执行的监听同时实现方法。加上即可。代码同时实现如下:

日常生活开发中,异步执行也能自己手动通过线程池来开启啦。回到我们责任编辑的后端观念主题,如果每个开发,都自己表述观测者商业模式的同时实现,这种代码会很混乱,所以最好是同时实现两个可扩展,通用型的观测者模版

6. 如前所述spring观测者商业模式,抽出两个模版

接下来的最后小节,跟我们一起如前所述spring的观测者商业模式,一步一步同时实现并抽出个模版哈。

我们要如前所述spring同时实现观测者商业模式的话,就包括这三步:

表述事件(相当于消息),一般表述两个第一类,继承

表述监听者(相当于观测者),同时实现接口

发送者(相当于被观测者),通过正式发布。

6.1 表述事件第一类

既然我们要抽出观测者模版,那肯定不是每个人自己写自己的,然后都去继承。

我们能自己表述两个项目有关的,通用型的类,然后一些有关通用型的信息属性能放进去,比如或者流水号甚么的,都能,看你们项目需要哈。以下代码,我表述两个空空如也的

如果你的观测者商业模式,是注册成功之后,发个消息的,你就能声明两个消息类事件第一类,继承通用型的即可。然后属性能自表述就好,比如。

同理,如果你想表述两个用户送礼物成功,然后发个该台,能表述两个

其他销售业务情景类似,只要想接入你的观测者模版,只需要自己表述事件第一类,继承于你的即可,是不是成就感满满啦。

6.2 表述监听者(观测者啦)

表述完事件,我们就能开始表述监听者了。我们表述的监听者,只需要同时实现接口接口即可。如果每个人也是各写各的,这些就很乱,毫无模版规范可言了。

我们能封装呵呵嘛,怎样封装呢?很单纯,能先声明两个,让它继承接口,我们都知道,接口也是能继承的哈。如下:

监听者的同时实现,关键在于同时实现的的接口方法即可。又因为未来别的销售业务情景接入观测者商业模式,都是按你的模版来,所以各个事件第一类,都是继承于你的的,所以我们能把的泛型加进去,如下:

有些时候,可能会有这种情景,是执行监听逻辑只对部分数据(或者说部分特殊用户才执行)。既然我们是抽出监听模版,考虑到可扩展性,我们能优化下的代码。我们能声明两个support的方法,默认是执行的,子类能覆盖重写(让子类去控制是否执行这个监听逻辑),如下:

然后呢,只有方法返回,才执行监听的逻辑,我们还能表述两个方法,给子类去同时实现自己的销售业务逻辑,代码如下:

对着以上的代码模版,小伙伴们是否还有一些优化的想法呢?

如果方法产生了异常,我们是不是能注意呵呵异常处理呢?以上小节,SimpleApplicationEventMulticaster源码分析的时候,不知道我们有没有细看,其实它就用了两个很巧妙的异常处理,我们能借鉴呵呵,哈哈哈,这是看源码的两个小小的好处了。

我们能给的同时实现呵呵,如果住异常的话,能表述两个异常处理方法,给子类自表述去同时实现,当然,异常能默认不处理嘛,代码如下:

最后呢,不同销售业务不同的监听者(观测者),直接同时实现你的就好啦,比如注册成功那个,我们声明两个类,如下:

6.3 表述发送者模版

我们的观测者模版,最后一步是表述发送者模版。最单纯的发送,是利用直接发送就好。

为甚么能直接采用applicationContext来发送,文章开始介绍,我们不是用ApplicationEventPublisher来发送嘛?其实是因为applicationContext继承了ApplicationEventPublisher接口

这个只是同步阻塞方式的观测者商业模式,一般来说,两个通用型的观测者模版。也需要提供异步非阻塞方式的观测者模版。责任编辑第5小节,我们知道了,在配置类加上,在需要异步执行的监听加上,即可同时实现异步。

为了方便管理,和API语义更明确,我们能手动设置线程池,给我们的模版正式发布类,提供异步发送的接口。我们先自表述两个线程池,一般不建议直接采用JDK的线程池。

怎样自表述线程池呢?

我们在配置文件,表述线程池一些属性(核心线程数、最大线程数等等)

然后声明两个线程配置类:

通过线程配置类,初始化线程池,代码如下:

然后回到,把异步正式发布的接口加上,如下:

7. 成天几句话

责任编辑我们学到了哪些知识呢?

观测者商业模式表述,观测者商业模式的采用情景

怎样同时实现两个单纯的观测者商业模式

Spring观测者商业模式的基本原理

同步阻塞、异步非阻塞、spring观测者商业模式的同时实现

后端观念:怎样抽出两个观测者模版`

进阶篇?有些小伙伴说,同时实现观测者商业模式,能采用guava的,我们能去看看哈,其实基本原理类似的。

1.本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!