观察者模式
观察者模式定义
观察者模式,也称为发布/订阅模式,定义了一对多的关系,允许多个观察者对象同时收听一个主题对象。当主体对象的状态发生变化时,所有观察者对象都会得到通知,这样它们就可以自动更新自己。
我们可以用日常生活、期刊订阅的例子来生动地解释上述概念。期刊订阅包括期刊出版者和订阅者两个主要角色,它们之间的关系如下:
期刊出版商-负责期刊出版和发行的订户-只需订阅即可。新版期刊出版后,他们会主动收到通知。如果订阅被取消,他们将来将不会收到通知。观察者模式中还有两个主要角色:主体和观察者。它们分别对应于示例中的期刊出版商和订户。接下来,让我们看图加深对以上概念的理解。
观察者模式结构
观察者模式实战
主题类定义
class Subject { constructor(){ this . observercollection=[];} addObserver(观察者){//添加观察者this。观察者收藏。push(观察者);} deleteObserver(观察者){//移除观察者让索引=this。观察者收藏。(观察者)索引;if(index=0)this . observercollection . splice(index,1);} notifyObjects(){//将此情况通知观察者。observatorcollection。foreach((观察者)=观察者。notify());} }观察者类定义
class Observer { constructor(name){ this . name=name;} notify(){ console . log(` $ { this . name }已被通知.`);}}用法示例
让Subject=new Subject();//创建主题对象letobserver 1=new observer(' SEM link er ');//创建观察者a-'semlinker '让观察者2=新观察者(' lolo ');//创建观察者b-'lolo '主题。增加观察者(观察者1);//注册observer as object . addobserver(observer R2);//register observer B subject . notifyobserver();//通知观察者主题。删除观察员(观察员1);//移除observer as object . notifyobservers();//验证上述代码运行成功后,是否成功删除控制台的输出结果:
已通知SEM link . lolo已通知. lolo已通知。
可观察用户
在介绍RxJS-Subject之前,让我们看一个例子:
常量间隔$=Rx。可观察区间(1000)。取(3);区间$。subscribe({ next : value=console . log(' Observer A get value : '值);});setTimeout(()={ interval$。subscribe({ next : value=console . log(' Observer B get value : '值);});}, 1000);上述代码运行后,控制台的输出结果:
观察者A获取值: 0观察者A获取值: 1观察者B获取值: 0观察者A获取值: 2观察者B获取值: 1观察者B获取值: 2
通过上面的例子,我