Java23种设计模式——18.行为型模式之观察者模式

Java中除去有设计原则之外,还有23中设计模式。

这些模式都是前辈们一点一点积累下来,一直在改进,一直在优化的,而这些设计模式可以解决一些特定的问题。

并且在这些模式中,可以说是将语言的使用体现的淋漓尽致。

那我们今天要学习  行为型模式  中的  观察者模式  !

观察者模式

先来百科一下,什么叫观察者模式,具体是观察什么玩意

我们主要看第二句话,这第二句话可以用一个例子去理解

我们好比说一个班级,班主任之前是A,之后A要离职,B接管了A之前的班主任的工作,对于这个班级的学生来说,以后就得见了B就得叫一声班主任

观察者模式的定义与特点

观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。

观察者模式是一种对象行为型模式,其主要优点如下。

1. 降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。

2. 目标与观察者之间建立了一套触发机制。


它的主要缺点如下。

1. 目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用。

2. 当观察者对象很多时,通知的发布会花费很多时间,影响程序的效率。

观察者模式的结构与实现

实现观察者模式时要注意具体目标对象和具体观察者对象之间不能直接调用,否则将使两者之间紧密耦合起来,这违反了面向对象的设计原则。

观察者模式的主要角色如下:

1. 抽象主题角色:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。

2. 具体主题角色:也叫具体目标类,它实现抽象目标中的通知方法,当具体主题的内部状态发生改变时,通知所有注册过的观察者对象。

3. 抽象观察者角色:它是一个抽象类或接口,它包含了一个更新自己的抽象方法,当接到具体主题的更改通知时被调用。

4. 具体观察者角色:实现抽象观察者中定义的抽象方法,以便在得到目标的更改通知时更新自身的状态。

知道了这些内容之后,我们来看一下如何去使用观察者模式

我们就实现一下上面的那个换班主任的这个例子

第一步:

我们先来定义一下抽象观察者角色

第二步:

有了这个抽象观察者之后,我们需要再弄两个具体的实现类,一个是老师,一个是学生

第三步:

有了这些还不够,我们还需要抽象目标类,我们需要将这些观察者放到一起,一旦需要通知的时候,一起通知

第四步:

我们最后弄个具体的实现类,然后实现刚刚的抽象目标类

测试:

OK,有了这些之后我们就可以测试了

我们执行一下,看看会怎么样

可以看到,当我们执行 notifyObserver 的时候,会通知到所有的观察者,而且每个观察者都做出了他们各自应该有的反应

OK,就到这里,大家好好看一下。多多练习。有问题可以联系我QQ:2100363119

欢迎大家访问我的个人网站:lemon1234.com 感谢大家留言

猜你喜欢

转载自blog.csdn.net/weixin_45908370/article/details/109493397