具有更改功能的观察者模式

Posted

tags:

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

我尝试做一个简单的观察者模式。通知订餐者订餐。但执行时出现错误:TypeError:foodChanger.addEventListener不是函数

这是我的代码:

class EventObserver {
        constructor() {
          this.observers = [];
        }

        subscribe(fn) {
          this.observers.push(fn);
        }

        unsubscribe(fn) {
          this.observers = this.observers.filter((subscriber) => subscriber !== fn);
        }

        broadcast(data) {
          this.observers.forEach((subscriber) => subscriber(data));
        }
      }

      const food = 'fruit'

      const blogObserver = new EventObserver();

      blogObserver.subscribe(() => {
        food.uptade(this);
      });
      const foodChanger = function () {
        const foods = ['vegetable', 'pizza', 'salad'];
        const timeSpin =  setInterval(()=>{this.food = foods[Math.floor(Math.random()*foods.length)];    
        },200);
        setTimeout(() => {
            clearInterval(timeSpin)
            }, 2000);
    }


      foodChanger.addEventListener('keyup', () => blogObserver.broadcast(foodChanger));
答案

您的foodChanger变量是一个函数,因此不是具有EventTarget方法的addEventListener

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

我如何使用视图模型从另一个片段访问函数

策略模式 观察者模式

设计模式 行为型模式 -- 观察者模式(发布-订阅(Publish/Subscribe)模式)

Java设计模式补充:回调模式事件监听器模式观察者模式(转)

观察者模式 - 观察者创建

具有相同功能的活动和片段