设计模式之观察者模式(代码片段)

arissy arissy     2023-01-24     244

关键词:

观察者模式,又被称为发布-订阅模式或消息机制,定义了一种依赖关系,解决了主体对象与观察者之间功能耦合。

虽然说观察者模式,又被称为发布-订阅模式,但是实际上它们之间存在差异的,区别在于调度的地方不同。

上图:
技术分享图片
技术分享图片

总结

  1. 从两张图片可以看到,最大的区别是调度的地方。虽然两种模式都存在订阅者和发布者(具体观察者可认为是订阅者、具体目标可认为是发布者),但是观察者模式是由具体目标调度的,而发布/订阅模式是统一由调度中心调的,所以观察者模式的订阅者与发布者之间是存在依赖的,而发布/订阅模式则不会。

  2. 两种模式都可以用于松散耦合,改进代码管理和潜在的复用。

代码

观察者模式实现代码

class ObserverList 
  constructor() 
    this.observerList = [];
  
  add(observer) 
    // todo add observer to list
    return this.observerList.push(observer);
  
  remove(observer) 
    // todo remove observer from list
    this.observerList = this.observerList.filter(item => item != observer);

  
  count() 
    // return observer list size
    return this.observerList.length;
  
  get(index) 
    return this.observerList[index];
  


class Subject 
  constructor() 
    this.observers = new ObserverList();
  
  addObserver(observer) 
    // todo add observer
    this.observers.add(observer);
  
  removeObserver(observer) 
    // todo remove observer
    this.observers.remove(observer);
  
  notify(...args) 
    // todo notify
    let observerCount = this.observers.count();
    for(let i=0; i<observerCount; i++) 
      this.observers.get(i).update(...args);
    
  


module.exports =  Subject ;

发布订阅实现代码

module.exports = class PubSub 

  constructor() 
    this.subscribers = ;
  

  subscribe(type, fn) 
    // todo subscribe
    if(typeof this.subscribers[type] === ‘undefined‘) 
      this.subscribers[type] = [fn];
     else 
      this.subscribers[type].push(fn);
    
  

  unsubscribe(type, fn) 
    // todo unsubscribe
    let listener = this.subscribers[type];
    if(!listener) 
      return;
    
    this.subscribers[type] = listener.filter(item => item != fn);

  

  publish(type, ...args) 
    // todo publish
    let listener = this.subscribers[type];
    if(!listener) 
      return;
    
    listener.forEach(element => 
      element.call(this, ...args);
    );
  

参考文章

http://www.cnblogs.com/lovesong/p/5272752.html



设计模式之-观察者模式(observerpattern)(代码片段)

观察者模式当对象间存在一对多关系时,则使用观察者模式(ObserverPattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 C++代码:#include<iostream>#include<vector>usingnamespacestd... 查看详情

设计模式之观察者模式(代码片段)

2018-09-21 20:57:03观察者模式  观察者模式又叫做发布-订阅(Publish/Subscribe)模式。它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,... 查看详情

2018.5.1设计模式之观察者模式(代码片段)

...gkey/p/7170826.htmlhttps://www.w3cschool.cn/javadesignpattern/e1w91ihr.html设计模式之观察者模式(ObserverPattern)1.定义、概念有时又称为模型---视图模式、源收听者模式或从属者模式是软件设计模式的一种,再此模式中,一个目标物件管理所有... 查看详情

设计模式之观察者模式(代码片段)

观察者模式我消化了两天,因为智商问题,理解的比较慢。。。另外恭喜我自己以科目二一百分的成绩顺利拿上驾照言归正传,先从大神那里扒一张图,对着图看比较容易理解。                     ... 查看详情

设计模式之观察者模式(代码片段)

观察者模式什么是观察者模式观察者模式属于行为模式的一种,定义了对象的通用交流方式。观察者模式定义了一对多的关系,一个对象改变了状态,则其它所有依赖它的对象都会收到通知。观察者模式有时候在网络模型中也叫... 查看详情

行为模式之观察者模式(代码片段)

观察者模式(ObserverPattern)也称发布订阅模式,它是一种在项目中经常使用的模式。定义:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。观察者模式的类图... 查看详情

设计模式之观察者模式(代码片段)

观察者模式,又被称为发布-订阅模式或消息机制,定义了一种依赖关系,解决了主体对象与观察者之间功能耦合。虽然说观察者模式,又被称为发布-订阅模式,但是实际上它们之间存在差异的,区别在于调度的地方不同。上图... 查看详情

设计模式之观察者模式(代码片段)

观察者模式是极其重要的一个设计模式,也是我几年开发过程中使用最多的设计模式,本文首先概述观察者模式的基本概念和Demo实现,接着是观察者模式在Java和Spring中的应用,最后是对观察者模式的应用场景和优缺点进行总结... 查看详情

设计模式之观察者模式(代码片段)

目录 观察者模式介绍气象站最初的气象应用布告板接口布告板实现气象台监控测试布告板发展气象站观察者模式测试Java内置实现观察者WeatherDataDisplayCurrentDisplayCurrent2DisplayTest输出结果观察者模式介绍观察者模式定义了对象之间... 查看详情

设计模式之观察者模式(代码片段)

观察者模式无外乎两个操作,observer订阅自己关心的主题、主题有变化后通知订阅此主题的observers。首先创建主题,主题中需要持有观察者列表的引用,用于在有状态或数据变化后通知到所有订阅此主题的观察者们。p... 查看详情

设计模式之观察者模式(代码片段)

观察者模式无外乎两个操作,observer订阅自己关心的主题、主题有变化后通知订阅此主题的observers。首先创建主题,主题中需要持有观察者列表的引用,用于在有状态或数据变化后通知到所有订阅此主题的观察者们。p... 查看详情

设计模式之观察者模式(代码片段)

观察者模式1.简要概述2.模式结构3.实现代码4.优点好处5.缺点弊端6.应用场景7.应用示例1.简要概述观察者模式定义了对象之间的一对多关系,也就是说当一个对象的状态发生变化时,会告知其它的依赖对象也做相应的状态... 查看详情

设计模式之观察者模式(代码片段)

前言生活中我们从牛奶厂家订阅了牛奶后,会有快递员在每天早晨给所有订阅牛奶的家庭送牛奶来。如果我们退订了之后,我们之后也不会收到牛奶。观察者模式就类似这样的一个场景,可以把牛奶场景定义为主题,客户理解为... 查看详情

设计模式之观察者模式(代码片段)

1.定义定义对象之间的一对多依赖关系,当一个对象改变状态是,所有依赖于它的对象都会自动获得通知;又叫做发布-订阅(publish-subscribe)模式,模型-视图(Model/View)模式,源-监听器(Source、Listener)模... 查看详情

设计模式之观察者模式(observer)(代码片段)

简介       观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界... 查看详情

设计模式之观察者模式(代码片段)

认识观察者模式可以通过报纸和杂志的订阅了解原理:1、报社的业务就是出版报纸2、向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来。只要你是他们的订户,你就会一直收到新报纸。3、当你不想再看报纸的时候,... 查看详情

设计模式之观察者模式c++实现(代码片段)

参考书籍《HeadFirst设计模式》设计模式和设计原则观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。观察者模式遵循的设计原则:为了交互... 查看详情

java设计模式之观察者模式(代码片段)

1、初步认识观察者模式的定义:  在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。大白话:  其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了... 查看详情