00:00
好,下边我们就来看观察者设计模式,我们先来理解一下啊,这观察者设计模式是个什么东西?啊,我们看着这段文字,我们来说啊,那么从。现实角度来说,我们每一个人都是一个观察者,同时也是一个被观察者。作为观察者,我们会发出一些信息。发信息干嘛呢?观察者在接收到。这些信息以后,你看被观察者发出信息,那么观察者就接收到这些信息,然后会做出相应的反应。就我们作为被观察者啊,我们会发信息,而我们要如果作为观察者呢?我们可以被被观察者所发出的信息影响,也就说你我们一旦观察到。被观察者。他给我们发送过来信息了,我们接收到这些信息了,那么然后我们可以根据这些信息做一些相应的动作。
01:08
一个被观察者可能存在多个观察者。也就是说,一个被观察者所发出的信息可能会影响到多个观察者。这先说观察者和被观察者啊,再来说这种模式,就说观察者设计模式定义了一种。一对多的关联关系。就是一个。被观察者、多个观察者、一个对象A与多个对象BCD之间建立的被观察与观察关系。当对象A的状态发生改变的时候,通知所有的观察者BCD。当观察者对象bad接收到A的通知以后,根据自身的实际情况做出相等改变。
02:05
OK了,这我们说的观察者。和被观察者啊,他们之间这种关系那OK了,当然我们这里面提到的观察者和被观察者啊,指的是什么?实质是某一类具有某一类功能的对象啊,所以我们这里边在在编程里边啊,怎么样就能表示某一类对象呢。怎么能表示的某一类对象?我们用接口,用接口可以表示某一类对象,当然了类也可以表示,类也是可以表示的啊,但接口表示的这个类,这个某一类功能的这个对象可能会更为抽象一些。也就是说它的范围会更广一些。好,所以我们在这个。
03:02
设计模式,我们写这个设计模式的时候啊。啊,我们就以接口来。定义观察者和被观察者。好,下边我们就来写这个代码。首先创建一个。Java嫁给他啊?Java。零一我们叫阿八。观察者是吧?Observer mode吧模式。直接就可以。切换视图了啊好,这这你看这就没有那个。没有那个那个服务器了是吧,切换到视图了。
04:00
好。先来一个诶interface啊。接口,我这接口咱们先定那个观察者吧。我接口是用I开头,IOB。观察者observer com点北京power node点。嗯,奥斯,这样吧。我们现在定义的这是什么?这个是。观察者接口,那观察者他具有什么样的一些?
05:00
属性和行为啊。观察者。他可以接收。可以处理。是不是信息呀。根据不同的信息可以做出不同的反应,所以这里边啊,我们这样来一个VO处理handle了。憨豆吧。Handle处理什么信息通知?T five message吧。哎,这是什么处理?被观察者。发送来的信息,OK,这是观察者接口。
06:02
再来写。被观察者被观察者。改一下包吧。这个observer。我这接口也叫啊吧,The就是可被观察的啊。这是。被观察者接口即什么可谓?观察的接口对吧?这不是形容词吗?加了ale可谓观察的是吧?那它都有什么?
07:01
行为。属性的行为呢。我们刚才说了。被观察者和观察者之间的数量关系是不是一对多的?所以。他可以添加观察者。ADDI。是吧?这是。添加观察者。你能添加就应该能删除啊,是不是删除,哎观察者。Lloyd remove all I all。
08:08
Love。哎,我这是删除观察者。还有什么?能添加能删除,你不要忘记观察者是不是可以向这个被观察者,可向观察者发送信息呀,是不是,所以。向。观察者发送信息。剩的吧。剩的。现在买谁去?发送信息或者通知是吧,那这样吧,我们叫not notify OB,这通知所有的。
09:11
是不是这个observer,你所有的观察者呀,你这要有信息呀。对不对,发送信息。那OK了,基本上就是这样了。好。那这两两个接口有了啊,再往下就好写了,我们要定义什么定义向的。类你肯定要定义类呀,对不对。类定义类定义类啊,那定义这个类是什么呢。对于这个类是。Class。Observers,这是观察者啊,我现在要定义观察者,这样吧,观察者,我们定义两类观察者吧,一个叫first OB。
10:13
它实现接口I or。Observer这个。是吧,嗯,咱们这样,我这儿呢,就简单写上一句话吧。呃,写什么呢?接收到。消息吧。这样吧,Message。
11:10
正在处理。消息谁接收到,我现在是first observer是吧,我就这样写了啊,一号,这是一号。观察者接收到消息,这个好一个。那这样咱们再来一个,再来一个,我就给这儿。第二个second。这个是second。那这是二号,二号观察者是不是接收到这个信息,消息正在处理,OK,两个观察者啊。
12:08
再来被观察者,被观察者一个是不是class?被观察者叫什么?被观察者就是一个普通类啊,咱们叫萨吧,呃,这个萨呢。他是要实现接口,它能够作为被观察者是因为它实现了一个接口,叫可被观察的是不是observ。好,它里边有三个方法,添加观察者,删除观察者和发送消息,呃,添加。也就是说你注意啊,诶对,咱们这儿没加注释,给这儿加个注释啊。定义一号观察者。
13:07
这个是。二号啊。哎,这俩定义了,那这我定义的什么。定义。被观察者。那我们说了,被观察者和观察者之间啊,是一对多的关系,这里边要添加添加剂,添加到哪儿,肯定要添加到一个集合里边啊,对不对,所以我在这需要一个集合private。需要个什么集合,我叫list吧,是吧?一个观察者集合IOB。All the。
14:05
声明什么观察者?集合。当然你注意这个集合一旦声明了你要创建它呀,对不对,在哪创建。我只要这个观察者,这个被观察者对象一创建,我就把这个。观察者集合给他创建了,所以我在这儿诶。在无参构造器里边,我在这儿。给他创建。Observe。等什么?我66661个list。
15:00
那一个A,诶,我给这儿创建了。观察者集合这儿声明。这儿创建在。被观察者对象假注释啊,在被观察者。对象。创建时,创建的同时就将什么观察者。集合创建,哎,你就创建了这个集合了,然后你就可以往里面添加了呀,你这做的一个添加ADD,实际上做的什么observers.add。Observer对吧,这不是添加吗?集合的添加这个呢,那这list删除啊,Observers点。
16:00
Remove。All。删除对吧,那这个呢。通知所有的,通知所有的,怎么通知你便利这个集合不就行了吗?是不是?For。Observer。Observer点。他不是能处理吗?OK了。是不是?这是干嘛?通知每一个观察者,这就OK了。这不用多说了,是不是添加这删除这不用加注释了啊,OK了,那么我的观察者也就定义好了,现在我的两个角色啊,全部定义好了,你注意我们说到角色了,刚才不是说了吗?行为型的是什么?通过构建不同的角色来完成某一特定功能的设计模式,你看我们的观察者。
17:22
设计模式就是不同的角色,什么角色,你现在就是观察者和被观察者呀,就是角色是不是好,再往下我们就可以写测试类了。My test test包含主方法。好了。来吧,写什么?那你首先你看看啊,我们写一下思路,我们首先要创建。
18:00
观察者吧。是不是要创建多个观察者?然后呢,创建被观察者。然后呢,我们。是不是被观察者?添加观察者。添加了以后干嘛,我是不是就可以通知啊,发出通知。被观察者向所有。观察者发送消息。是不是就这样?那好了,按着写吧,创建多个观察者观察者I all吧。
19:03
第一个吧,First,我留一个first observer对吧。再来一个I second,我new一个。Second of observe是吧?诶,这样的话,我的两个观察者就有了。被观察者呢?被观察是好说呀。被观察者不就是I?哎,其实这个你写不写他都行,我我直接写萨,我另一个萨可以吧,这是不是被观察者。
20:00
前面写上接口也行啊,无所谓。就目前我们写的这个DEMO来说是无所谓了啊,然后被观察者添加观察者some点。First。Some ADD。Second。添加过了吧,发出通知上点。Notify。是不是我发出通知,比如说。啊,比如说。全体是吧。这个这个。注意哈。出发,哎,啊,我就我就发出这样一个通知,那么观察者一发现,诶这儿说了,全体注意出发,马上他做出的相应的。
21:03
反应是什么,就就出发了。好,跑一下看看什么个情况。走。你看是不是一号观察者接收到消息,全力出发,全力注意出发,正在处理消息,二号你看。这就是观察者设计模式。这就是观察者设计模式。那么这里边儿的。I observe I observe代表的是两类对象。那么这两类之间存在的特点是什么?一个可以发送消息,一个是可以接收消息。当然了,我们我们在这儿啊,还可以什么继续往后可以再写一下,我们没有测试这个的呀,这是被观察者。
22:04
干嘛?删除指定的。观察者,我可以删除some.remove observer。比如我删除FIRST1号。删除以后干嘛?再发书。我再发,再发你会看到什么情况。这俩是原来是他的吧。这俩以后这样,为了让大家能看得更清楚啊。我这加个。分割线分割线以上是发送给所有的观察者的分割线以下我是不是删除了。一号观察者直接发给了,是不是二号观察者呀。
23:00
你看是不是只有二号观察者接收到了一号没有?对不对。OK了。这就OK了,当然你还可以再给他添加进去。还可以添加进去,那我们这个程序写的简单啊,你还可以怎么样。比如一号,一号观察者是吧?我可以根据不同的信息做出不同的反应。那这我们就不写了,你可以对这个message进行解析。OK了,那么这就是我们说的观察者设计模式。
我来说两句