设计模式之单例模式

发布于 2023-04-08 20:10:43 字数 1084 浏览 76 评论 0

这个是我学习的第一个设计模式。

单例模式的定义是: 保证一个类有且仅有一个实例,并提供一个访问它的全局访问点。

基于上面的解释,我们发现全局变量都是符合 单例模式 的。

应用场景

其实只要你有需求是全局出现一次的都可以用,比如全局的蒙层,你不希望页面同时出现两个蒙层,那么很显然你可以使用单例模式。 类似的例子还有全局缓存,线程池等。

实现

下面是一个最简单的单例模式的实现:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

装迷糊

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文