观察者模式是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了观察者模式是啥相关的知识,希望对你有一定的参考价值。

参考技术A 官方解释:
观察者模式(有时又被称为发布-订阅Subscribe>模式、模型-视图View>模式、源-收听者Listener>模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。
个人理解:
观察者模式是一种思想,不需要人为的去关注观察者和被观察者之间是怎样联系的,实现了解耦,只需要对象去注册被观察者(Observerable)与观察者(Observer),然后被观察者去添加一个或者多个观察者,当被观察者发生变动就会立即通知所有的观察者,下面让我们来看看是怎样实现这个功能的。
被观察者首先通过addObserver(Observer o)来添加一个观察者,底层代码中会把这个对象o放进一个vector集合中,当然也可以添加多个观察者,当观察者发生变动的时候就会触发
setChanged();
notifyObservers();
这两个方法,然后底层代码中就回去遍历装有观察者的那个vector,然后
for (int i = arrLocal.length-1; i>=0; i--)
((Observer)arrLocal[i]).update(this, arg);
调用update方法通知每一个观察者,这样观察者对象中就可以拿到被观察者的相关对象和信息
参考技术B 现在的人真是越来越懒了
明明能自己百度
非要发帖问别人
参考技术C 到百度 打 csol观察者 找个看看就OK啦

每日灵魂一问nodejs-eventEmitte是啥?手动实现

eventEmitte是什么

eventEmitter是一个对事件进行监听的对象,
说白了就是为事件写回调函数,
当触发一个事件执行后,
会执行为该事件绑定的回调函数。

Node采用了事件驱动机制,而EventEmitter就是Node实现事件驱动的基础
Node的events模块只提供了一个EventEmitter类,
这个类实现了Node异步事件驱动架构的基本模式——观察者模式

手动实现eventEmitte

class EventEmitter{
   constructor(){
      this.handler={};
   }
   on(eventName,callback){
      if(!this.handles[eventName]){
        this.handles[eventName]=[];
      }
      this.handles[eventName].push(callback);
   }
   emit(eventName,...arg){
       if(this.handles[eventName]){
       for(var i=0;i<this.handles[eventName].length;i++){
          this.handles[eventName][i](...arg);
       }
   }
}

调用
let event = new EventEmitter();
event.on(\'click\',function(str){
   console.log(str);
});
event.emit(\'click\',\'Yeah!\');
//输出Yeah!

以上是关于观察者模式是啥的主要内容,如果未能解决你的问题,请参考以下文章

设计模式——观察者模式

观察者模式 vs 发布-订阅模式

观察者模式

设计模式之观察者模式

Android开发模式之观察者模式

[设计模式]观察者模式与订阅模式