博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
重学设计模式(六)—— 观察者模式
阅读量:4223 次
发布时间:2019-05-26

本文共 1631 字,大约阅读时间需要 5 分钟。

前言

生活中我们经常使用手机订阅功能,用来订阅一些我们感兴趣的东西,比如体育赛况、股票行情等等。每当这些订阅的事务有重大变化发生时,我们都能收到相关通知信息,当然我们也能对失去兴趣的事情取消订阅,这样我们便不会收到相关推送了。这就是Observer观察者模式的一种典型应用场景。

Observer观察者模式

在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。

这里写图片描述

主题Subject是观察者模式中有一个抽象的概念,代表订阅方订阅的实体。

public interface Subject {    void addObserver(Observer observer);    void removeObserver(Observer observer);    void notifyObserver();}

以此派生出一个具体主题ConcreteSubject,

public class ConcreteSubject implements Subject{
private List
list; public ConcreteSubject(){ this.list = new ArrayList
(); } public void attach(Observer observer) { this.list.add(observer); } public void detach(Observer observer) { this.list.remove(observer); } public void notifyObserver() { for (Observer o : this.list){ o.update(); } }}

对于订阅方而言,也需要有个抽象的概念——订阅方Observer,当收到通知时改变自身状态,

public interface Observer {    void update();}

同样,以此派生出一个具的订阅方ConcreteObserver,

public class ConcreteObserver implements Observer{
public void update() { System.out.println("I've been notified!"); }}

示例代码:

public class ObserverTest {    public static void main(String[] args) {        Subject sbj = new ConcreteSubject();        Observer obs01 = new ConcreteObserver("A");        Observer obs02 = new ConcreteObserver("B");        Observer obs03 = new ConcreteObserver("C");        sbj.addObserver(obs01);        sbj.addObserver(obs02);        sbj.addObserver(obs03);        sbj.notifyObserver();        System.out.println("====================");        sbj.removeObserver(obs02);        sbj.notifyObserver();    }}

运行结果:

这里写图片描述

你可能感兴趣的文章
报名 | 刘鹰教授:草根创新力:中国经济快速发展的秘诀
查看>>
干货 | 龙瀛:面向智慧城市的人本尺度城市形态:理论、方法与实践
查看>>
独家 | 快速掌握spacy在python中进行自然语言处理(附代码&链接)
查看>>
赠票 | 来智源大会,聆听张钹院士、Michael I. Jordan等大咖分享!
查看>>
1人15篇入选?华人论文知多少?深度分析ICCV2019论文录取背后的那些事儿!
查看>>
女性程序员占比超17%,平均月薪近2万 | 程序员就业大数据报告
查看>>
报名 | 加密金融生态大咖私享会
查看>>
数据蒋堂 | 最简单的大数据性能估算方法
查看>>
AI Time 7 | 人机交互的终极状态——人机共生
查看>>
独家 | 最新NLP架构的直观解释:多任务学习– ERNIE 2.0(附链接)
查看>>
福利 | “石墨烯之父”现场演讲!中国科幻大会“科技与未来”论坛报名中
查看>>
Google的预训练模型又霸榜了,这次叫做T5(附榜单)
查看>>
独家 | 手把手教你如何使用Flask轻松部署机器学习模型(附代码&链接)
查看>>
报名 | 2019前沿信息科技创新论坛
查看>>
收藏 | 10本书,从Python小白进阶数据分析、AI大神
查看>>
送你38个常用的Python库,数值计算、可视化、机器学习等8大领域都有了
查看>>
近期活动盘点:清华严飞大数据探寻中国文脉讲座、2019前沿信息科技创新论坛...
查看>>
数据蒋堂 | 这个产品能支持多大数据量?
查看>>
独家 | 手把手教你做数据挖掘 !(附教程&数据源)
查看>>
报名 | 首期AI Time PhD:听清北师兄分享前沿研究成果!
查看>>