前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >15.设计模式--观察者模式(Observer模式)

15.设计模式--观察者模式(Observer模式)

作者头像
大猫的Java笔记
发布2021-11-11 09:41:36
3390
发布2021-11-11 09:41:36
举报
文章被收录于专栏:大猫的Java笔记

1.定义

观察者模式是一种行为型模式,又称发布-订阅模式(Publish-Subscribe:Pub/Sub)。它是一种通知机制,让发送通知的一方(被观察方)和接收通知的一方(观察者)能彼此分离,互不影响。

无论是QQ还是微信都有群聊功能,只要在群中的任意成员发布一条消息,那么整个群中所有的用户都会收到消息。这所有的用户仿佛都是一个观察者,时刻在观察群中是否有新消息,如果有新的消息,那么马上通知群里除了屏蔽群消息的用户。

2.观察者模式结构图

GroupChat是群的抽象,其中引用了Observer也就是群中的用户,同时拥有对用户的新增、删除、产生消息以及消息通知方法。ConcreteGroupChat是GroupChat的具体实现,所以继承于GroupChat。而Observer是对用户的抽象即观察者的抽象,其中包含了一个写消息的方法,相当于将消息发给对应的用户,进行展示。而User则是对Observer具体的实现。

3.观察者模式实现

GroupChat中引用了Observer,用于保存群中的用户,当然其中还包含了对用户的新增、删除、产生消息以及消息通知方法。消息通知就是把消息推送给群里的所有用户。

ConcreteGroupChat是具体的群,为了方便演示,没有定义群的基本信息,例如群名称等信息,只是将群的消息产生使用了一个随机数字来产生。

Observer就是观察者,用于观察群中消息的产生,但是Observer只是抽象的观察者,只是定义方法,而不做具体的实现,具体怎么做是子类的事情。

User就是具体的观察者,实现于Observer,对于消息接受到以后怎么处理都是通过实现writeMessage方法,文中只是做了消息的打印,谁接受到了消息。

下面我们新建了一个群,同时添加群中成员为张三和李四,然后调用群的产生消息方法,此时可以看到张三和李四分别都收到了10条消息。

观察者模式中登场的角色

Subject(观察对象),Subject角色,相当于被观察的对象,文中由GroupChat扮演此角色

ConcreteSubject(具体的观察对象),ConcreteSubject角色,是对Subject的具体实现,文中由ConcreteGroupChat扮演此角色。

Observer(观察者),Observer角色,是观察消息的变化,文中由Observer类扮演此角色

ConcreteObserver(具体的观察者),是对Observer的具体实现,文中由User类进行扮演此角色。

参考文献《图解设计模式》

代码获取地址:https://gitee.com/bughong/design-pattern

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大猫的Java笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档