返回

多选框多选取舍 观察者模式运筹帷幄**

前端

一、什么是Observer(观察者)模式

Observer模式是一种设计模式,它允许对象在不了解对象内部的情况下,对对象的状态进行监听和响应。

在Observer模式中,有以下几个角色:

  • Subject(目标) :维护一系列的观察者,方便添加或者删除观察者。
  • Observer(观察者) :观察目标的状态,并根据目标的状态做出相应的反应。

二、具体实现

我们实现Observer模式需要使用到以下组件:

  • Subject(目标) :维护一系列的观察者,方便添加或者删除观察者。
  • Observer(观察者) :观察目标的状态,并根据目标的状态做出相应的反应。

1. 实现Subject(目标)

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

  addObserver(observer) {
    this.observers.push(observer);
  }

  removeObserver(observer) {
    this.observers = this.observers.filter((obs) => obs !== observer);
  }

  notifyObservers() {
    this.observers.forEach((observer) => observer.update());
  }
}

2. 实现Observer(观察者)

class Observer {
  constructor(subject) {
    this.subject = subject;
    this.subject.addObserver(this);
  }

  update() {
    // 根据目标的状态做出相应的反应
  }
}

3. 使用Observer模式实现多选框的全选功能

const subject = new Subject();
const observer = new Observer(subject);

const checkboxes = document.querySelectorAll('input[type="checkbox"]');

checkboxes.forEach((checkbox) => {
  checkbox.addEventListener('change', () => {
    subject.notifyObservers();
  });
});

observer.update = () => {
  const checkedAll = checkboxes.every((checkbox) => checkbox.checked);
  const checkboxAll = document.querySelector('input[type="checkbox"][name="all"]');
  checkboxAll.checked = checkedAll;
};

在这个例子中,Subject对象维护了所有复选框的状态,Observer对象观察Subject对象的状态,并根据Subject对象的状态更新全选复选框的状态。

三、结语

Observer模式是一种设计模式,它允许对象在不了解对象内部的情况下,对对象的状态进行监听和响应。Observer模式可以用于实现各种各样的功能,比如多选框的全选功能、按钮的点击事件监听等等。