是否可以使用 REST API 实现观察者模式

Posted

技术标签:

【中文标题】是否可以使用 REST API 实现观察者模式【英文标题】:Is it possible to implement observer pattern using REST API 【发布时间】:2017-02-27 07:49:33 【问题描述】:

我是模式的新手,想知道是否可以使用 REST api 实现观察者模式。我目前的观点是这是不可能的,因为 REST 更像是拉式架构,而观察者更像是推式架构。

欢迎您的想法。

【问题讨论】:

【参考方案1】:

一个对象维护一个依赖/观察者列表,并在状态变化时自动通知他们。为了实现观察者模式,EventEmitter 来救场

// MyFancyObservable.js
var util = require('util');  
var EventEmitter = require('events').EventEmitter;
function MyFancyObservable()   
EventEmitter.call(this);

util.inherits(MyFancyObservable, EventEmitter); 

就是这样;我们刚刚制作了一个可观察的对象!为了使它有用,让我们为其添加一些功能。

MyFancyObservable.prototype.hello = function (name)   
this.emit('hello', name);
;

太好了,现在我们的 observable 可以发出事件了 - 让我们试试吧!

var MyFancyObservable = require('MyFancyObservable');  
var observable = new MyFancyObservable();

observable.on('hello', function (name)   
console.log(name);
);

observable.hello('john'); 

更多详情请点击链接 Fundamental Node.js Design Patterns

Immediate State Updates for REST/HTTP APIs using Observer Pattern

【讨论】:

我已将此标记为答案,因为似乎仍需要某种形式的推送通知才能实现共享链接中展示的“实时”功能

以上是关于是否可以使用 REST API 实现观察者模式的主要内容,如果未能解决你的问题,请参考以下文章

观察者模式

在实现中使用数据库时,观察者模式和发布-订阅模式是不是相同?

JDK自带的观察者模式源码分析以及和自定义实现的取舍

js设计模式-观察者模式来模拟vue的双向数据绑定

实践GoF的23种设计模式:观察者模式

模板方法模式 + 观察者模式 + 简单工厂模式 + 单例模式实现一个简单的数据表读写