设计模式之单例模式
这个是我学习的第一个设计模式。
单例模式的定义是: 保证一个类有且仅有一个实例,并提供一个访问它的全局访问点。
基于上面的解释,我们发现全局变量都是符合 单例模式 的。
应用场景
其实只要你有需求是全局出现一次的都可以用,比如全局的蒙层,你不希望页面同时出现两个蒙层,那么很显然你可以使用单例模式。 类似的例子还有全局缓存,线程池等。
实现
下面是一个最简单的单例模式的实现:
function Singleton() {
// 你的业务逻辑
}
Singleton.getInstance = function(...args) {
if (!Singleton.instance) {
Singleton.instance = new Singleton();
}
return Singleton.instance;
};
Singleton.instance = null;
// test
const a = Singleton.getInstance();
const b = Singleton.getInstance();
console.log(a === b); // true
注意上面的例子是用 Singleton.getInstance 来实例化的。
我们继续改造一下代码,用闭包来实现,这样我们可以使用 new 来实例化:
const Singleton = (function () {
let instance = null;
return function () {
if (instance) {
return instance;
}
// 你的业务逻辑
return instance = this;
}
})();
// test
const a = new Singleton();
const b = new Singleton();
console.log(a === b); // true
扩展
如果我想写一个高阶函数,高阶函数接受一个函数为参数,返回一个新的函数,这个新的函数和原函数功能一样,但是多了单例的效果,如何实现?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: 设计模式之代理模式
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论