微信小程序之设计模式

文章介绍了如何在微信小程序中应用观察者模式来实现数据的自动更新。通过创建Observer和Subject类,实现了观察者和主题之间的松耦合,使得在页面中可以通过Subject实例调用notifyAll方法来通知所有观察者更新数据。
摘要由CSDN通过智能技术生成

一、观察者模式

代表对象间的一对多的依赖。需要自动更新数据的地方就有它的存在。

1.1 相关类图

图片仅供参考

图片仅供参考

观察者模式提供了一种对象设计,让主题和观察者之间松耦合。主题不需要知道观察者具体类是什么,做了什么或者其他细节。

1.2 观察者的定义

/**
 * 观察者
 */
class Observer {
  constructor() {

  }

  /**
   * 具体实现在各自的子类中进行
   * @param {*} data 需要更新的数据
   */
  update(data) {

  }

}
module.exports = Observer

1.3 主题的定义

/**
 * 主题,通知观察者去更新数据
 */
class Subject {
  constructor() {
    this.mList = new Set();
    this.mData = null;
  }

  addObserver(Observer) {
    this.mList.add(Observer);
  }

  removeObserver(Observer) {
    this.mList.delete(Observer);
  }

  removeAllObservers() {
    this.mList.clear();
  }

  notifyAll() {
    const list = this.mList;
    list.forEach((observer) => {
      observer.update(this.mData);
    });
  }

  setData(data) {
    this.mData = data;
  }
}

module.exports = Subject

1.4 页面使用示例

1.4.1 创建Observer

在需要使用的页面中创建HomeObserver 实例。

class HomeObserver extends Observer {
  constructor(page) {
    super();
    this.mPage = page;
  }

  update(data) {
	// 根据需求更新页面的数据
  }
}

module.exports = HomeObserver

1.4.2 创建Subject

import Subject from '../../../moudles/patterns/observer/Subject'

let BLE_SUBJECT = null;

class BleSubject extends Subject {
  constructor() {}

  static getInstance() {
    if (BLE_SUBJECT == null) {
      BLE_SUBJECT = new BleSubject();
    }
    return BLE_SUBJECT;
  }
}
module.exports = BleSubject

1.4.3 添加Observer

import HomeObserver from './data/HomeObserver'
import Subject from './data/BleSubject'
let mHomeObserver;
let mSubject;

Page({
  data: {

  },
  onLoaded() {
    
    mHomeObserver = new HomeObserver(this);
    mSubject = Subject.getInstance();
    mSubject.addObserver(mHomeObserver);
  }
)

在需要的地方调用mSubject.notifyAll(),页面就会自动更新数据了。

希望对你们有所帮助,之后还会继续写其他设计模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jjr_1984

谢谢您的鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值