观察者设计模式

计算机软件开发 2024-9-12 16:19:19 116 0 来自 中国
前言

观察者(Observer)模式的界说:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,全部依赖于它的对象都得到关照并被自动更新。这种模式偶然又称作发布-订阅模式、模子-视图模式,它是对象举动型模式。
观察者模式是一种对象举动型模式,其重要长处如下: - 低落了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。符合依赖倒置原则。 - 目标与观察者之间创建了一套触发机制。
它的重要缺点如下: - 目标与观察者之间的依赖关系并没有完全解除,而且有大概出现循环引用。 - 当观察者对象很多时,关照的发布会耗费很多时间,影响步伐的服从。
生存小案列

举例说明:向导创建了一个名为摸鱼前锋队的群,用于团建事项的关照,向导当晚发布了一条消息--这次团建新入职的员工必要准备演出节目。这个时候群里全部人都能看到这条消息,只有新员工收到这个关照后会有一系列演出的准备工作要做,然而这条消息对老员工没有任何的影响。
这就是一个观察者模式的生存案例。当向导有事的时候发布关照到群里,群里的全部人收到关照后做相应的事变。 以上案例中可以分为下面几个脚色: - 监听者(也可以说是观察者):群内里每一个人都是一个监听者。 - 管理者(对应其他教程中的主题-subject):也就是群,重要有添加(群成员)监听者,移除(群成员)监听者,尚有关照全部监听者的功能。 - 事故(大概说关照):也就是向导发到群内里的消息是一个事故(大概说关照)。
通过上面的例子来整理一下实现一个观察者模式的思绪。 看看一个流程:向导创建群将相干职员添加到群,然后向群内里发布一个关照。群内里每个人看到这条消息后,做相应的事变,当这个消息与自己无关时,啥也不做。 向导在这内里可以看做是应用步伐的一个线程,只是步伐实行的一个单元而已。 接下来就是一样平常设计模式都有的套路,为了步伐的扩展性。上面的几个脚色都必要界说成抽象的概念,那么在Java内里界说抽象有两种一个是接口一个是抽象类。具体界说成接口还是抽象类根据现实环境自行选择。
抽象概念

为什么要界说成抽象的呢?我们先相识一下抽象的概念,我理解抽象就是对一类事物公共部分的界说。比如说水果,就是对一类事物的抽象界说,说到水果,各人肯定能遐想到,多汁且重要味觉为甜味和酸味,可食用的植物果实,有丰富的营养因素。这个就是水果的公共因素,但是水果又分为多种,火龙果,百香果···。 抽象的利益:比如今天你家里只有一种水果-火龙果。你爹叫你拿一点水果来吃,那你肯定就能直接把家里唯一的水果火龙果拿过来孝顺你老爹。在这个过程中你爹说的水果而不是火龙果,可以或许少说一个字从而节流能量多活一纳秒。那么我们可以得出一个结论-使用抽象概念可以延年益寿→_→。 开个打趣,下面言归正传,我说一下我以为抽象的利益: - 当接口只界说一个实现类时,方便功能的更换(换一个实现类,在新实现类新增功能。从而克制了对调用方和原实现类原代码的改动)。 - 方法形参界说为抽象,这时就能实现传入差别的实现类该方法可以实现差别的功能。 - 同一管理,让步伐更规范化,当抽象中界说新的非抽象方法,子类可以直接继续使用。
有了上面的铺垫,很轻易理解下面的代码示例。
观察者模式代码示例

观察者模式实在也是发布订阅模式。 针对差别的观察者必要有差别的实现方式,以是先创建一个管理者的接口,将其界说为一个抽象概念,方便后续扩展。 这个接口相称于-群(管理者)
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 23:27, Processed in 0.155332 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表