首页 > 科技 >

设计模式之观察者模式(java代码实现)

2019-07-15 00:15:37 暂无 阅读:1099 评论:0

我们在电视上都看过如许一个场景,一个小孩拿着报纸在街上吆喝着,“卖报了,卖报了,xx鬼子侵占了中国东三省,张学良拱手让人”。然后想细看内容的人就会买一份报纸。又或许我们一定都存在着如许一个群,这个微信群专门用于通知新闻的,只要群里一有新闻,我们就会知道。不管是我们订阅报纸的过程,照样接管群通知的过程,这其实就是视察者模式的天真施展。这篇文章一路来剖析认识一下视察者模式。

一、熟悉视察者模式

首先我们给出视察者模式的界说:视察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它界说了一种一对多的依靠关系,让多个视察者对象同时监听某一个主题对象。这个主题对象在状况转变时,会通知所有的视察者对象,使他们可以主动更新本身。

概念很清楚,我们举个例子来懂得一下视察者模式的寄义,我们都在新浪微博中存眷过某一位明星(假设,当然好多人已经不玩微博了),每当这位明星发布一条动态时候,他的粉丝就都邑知道。我们使用一张图来透露一下他们的关系。

设计模式之观察者模式(java代码实现)

上面这位明星在新浪微博上发了一条动态,说他会唱、跳rap等等。然后他的粉丝就都知道了。从这个例子中我们能够看到,这里包含了两种人,第一种是明星,第二个是粉丝。转化为设计模式中的说话就是主题和视察者。

我们的明星的微博就相当于与一个主题,粉丝就是视察者,随时视察明星的动态。不外明星有权力让你存眷,也有权力把你拉黑。如今我们从类图的角度来看一下:

设计模式之观察者模式(java代码实现)

从上面我们能够看到,这里面包含了两大类(主题和视察者)一共四个脚色:

(1)Subject:抽象主题,他把所有视察者对象留存在一个鸠合里,能够有随意数量的视察者,抽象主题供应一个接口,能够增加和删除视察者对象。意思就是明星把所有的粉丝都留存在一个账号里面,粉丝数量不限,能够新增粉丝也能够拉黑粉丝。

(2)ConcreteSubject:具体主题,该脚色将有关状况存入具体视察者对象,在具体主题的内部状况发生改变时,给所有..过的视察者发送通知。意思是我们的明星一有动态,就会把新闻给粉丝。

(3)Observer:抽象视察者,是视察者者的抽象类,它界说了一个更新接口,使得在获得主题更改通知时更新本身。这就是我们所有粉丝的抽象。

(4)ConcrereObserver:具体视察者,实现抽象视察者界说的更新接口,以便在获得主题更改通知时更新自身的状况。具体每一个粉丝。

视察者模式照样对照简洁的,就是一个粉丝存眷明星的实例。如今代码来实现一下。

二、代码实现视察者模式

这个例子我们照样那上面的例子来注释解说。

第一步:界说抽象视察者(Observer):抽象的粉丝

第二步:具体的视察者(concreteObserver):具体的粉丝

设计模式之观察者模式(java代码实现)

第三步:界说抽象主题(Subject):抽象明星

设计模式之观察者模式(java代码实现)

第四步:具体主题(ConcreteSubject):具体的明星

设计模式之观察者模式(java代码实现)

第五步:测试

设计模式之观察者模式(java代码实现)

代码就这么多,说起来这个视察者模式照样很简洁的。下面我们就来剖析一下这个视察者模式

三、剖析视察者模式

视察者模式的首要长处在于能够实现透露层和数据逻辑层的星散,并在视察方针和视察者之间竖立一个抽象的耦合,支撑广播通信;其首要瑕玷在于若是一个视察方针对象有好多直接和间接的视察者的话,将所有的视察者都通知到会破费好多时间,并且若是在视察者和视察方针之间有轮回依靠的话,视察方针会触发它们之间进行轮回挪用,或者导致系统溃逃。

其实还有一点需要我们去认识,在上面的例子傍边我们的会发现,其实粉丝的新闻是明星推过来的,还有一种视察者模式,也就是我们的粉丝自动去获作废息。

(1)推模型: 主题对象向视察者推送主题的具体信息,不管是否需要。

(2)拉模型:主题对象在通知视察者的时候,只传递少量信息。若是视察者需要更具体的信息,由视察者自动到主题对象中获取。

OK。视察者模式就先到这,若有问题还请指摘斧正

相关文章