单例模式、发布-订阅者模式的简单实现

单例模式

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

实现单例核心思想

用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象,接下来我们用JavaScript来强行实现这个思路,请看代码:

let createLoginWindow = function(title) {
  this.title= title;
}
 
let proxySingleton = (function() {
  var instance;
  return function(title) {
    if (!instance) {
      instance = new createLoginWindow(title);
    }
    return instance;
  }
})();

let windowA = new proxySingleton('login1');
let windowB = new proxySingleton('login2');
 
console.log(windowA === windowB); // true

可以看到,上述代码中createLoginWindow负责构造对象,然后通过代理proxySingleton来判断是构造新的对象还是返回已有对象。

发布-订阅者模式

数据双向绑定中会用到的一种模式;后续会更新关于Vue 的内容;

function Emitter() {
	//订阅者容器,存放订阅者的回调函数
    this.dep = [];
    // 订阅
    this.notice = function (callback) {
        this.dep.push(callback)
    }
    //发布,通知更新
    this.emit = function () {
        this.dep.forEach((fn) => {
            fn();
        })
    }
}
let e = new Emitter();
e.notice(function () { console.log(123) })
e.notice(function () { console.log(321) })
e.emit();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值