什么是单例模式

单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。在JavaScript里,单例作为一个命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象。

整个运行期间只会被初始化一次。
jquery就是一个很大的单例 (function(){var jquery=(function(){})();window.jQuery = window.$ = jQuery;})(window);

单例模式的基本结构

```
var Singleton = {attr1: 'test1',attr2: 10,method: function(){...},...}```复制代码

这就是一个单例对象,使用对象字面量的方法,Singleton是全局变量,js载入时被初始化一次。
jquery就是一个很大的单例 (function(){var jquery=(function(){})();window.jQuery = window.$ = jQuery;})(window);

如果以后要扩展该对象,你可以添加自己的私有成员和方法,然后使用闭包在其内部封装这些变量和函数声明。只暴露你想暴露的public成员和方法,样例代码如下:

var mySingleton = function () {/* 这里声明私有变量和方法 */var privateVariable = 'something private';function showPrivate() {console.log(privateVariable);}/* 公有变量和方法(可以访问私有变量和方法) */return {publicMethod: function () {showPrivate();},publicVar: 'the public can see this!'};
};var single = mySingleton();
single.publicMethod();  // 输出 'something private'
console.log(single.publicVar); // 输出 'the public can see this!'复制代码

但如果我们想做到只有在使用的时候才初始化,那该如何做呢?
由于单例对象一直存在内存之中,如果比较大的实例,一开始就初始化,代价比较高,可以等到需要的时候再初始化
为了节约资源的目的,我们可以另外一个构造函数里来初始化这些代码,如下:

var Singleton = (function () {var instantiated;function init() {/*这里定义单例代码*/return {publicMethod: function () {console.log('hello world');},publicProperty: 'test'};}return {getInstance: function () {if (!instantiated) {instantiated = init();}return instantiated;}};
})();/*调用公有的方法来获取实例:*/
Singleton.getInstance().publicMethod();复制代码

单例模式的思路是:一个类能返回一个对象的引用(并且永远是同一个)和一个获得该实例的方法(静态方法,通常使用 getInstance 名称)。那么当我们调用这个方法时,如果类持有的引用不为空就返回该引用,否者就创建该类的实例,并且将实例引用赋值给该类保持的那个引用再返回。同时将该类的构造函数定义为私有方法,避免其他函数使用该构造函数来实例化对象,只通过该类的静态方法来得到该类的唯一实例。

转载于:https://juejin.im/post/59cb699e6fb9a00a3e30758b

javascript设计模式--单例模式相关推荐

  1. JavaScript设计模式——单例模式的理解与应用

    JavaScript设计模式--对单例模式的一些见解 JavaScript设计模式主要分类: ①创建型设计模式,例如单例模式.工厂模式 ②结构型设计模式,例如装饰者模式.适配器模式 ③行为型设计模式, ...

  2. JavaScript设计模式----单例模式

    声明:这个系列为阅读<JavaScript设计模式与开发实践> --曾探@著一书的读书笔记 1.单例模式的特点和定义 保证一个类仅有一个实例,并且提供一个访问它的全局访问点. 2.传统面向 ...

  3. JavaScript设计模式 单例模式

    单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 先看一下,在Js中使用传统面向对象的单例模式. 面向对象的单例模式,是通过new关键字来实例化我们想要的对象,并将其赋值给in ...

  4. javascript设计模式-单例模式(singleton pattern)

    为什么80%的码农都做不了架构师?>>>    最简单的单例模式 var mySingleton = {property1: "something",proper ...

  5. JavaScript设计模式——单例模式

    单例模式 单例模式顾名思义就是只生成一个实例对象的一种模式.无论调用多少次都只返回相同的实例. 当我们单击登录按钮的时候,页面中会出现一个登录浮窗,而这个登录浮窗是唯一的,无论单击多少次登录按钮,这个 ...

  6. JavaScript 设计模式核⼼原理与应⽤实践之单例模式——Vuex的数据管理哲学

    JavaScript 设计模式核⼼原理与应⽤实践之单例模式--Vuex的数据管理哲学 保证一个类仅有一个实例,并提供一个访问它的全局访问点,这样的模式就叫做单例模式. 单例模式的实现思路 思考这样一个 ...

  7. Javascript设计模式之单例模式

    前言:菜鸡也有梦想,而我的梦想就是进一个真正的互联网大厂.以前学习的时候没有系统的整理,从今天开始要保持每周写博客的习惯,希望自己可以有所成长.为了培养编程思维,决定从设计模式开始写起.我是通过读&l ...

  8. JavaScript设计模式与开发实践系列之单例模式

    本系列为<JavaScript设计模式与开发实践>(作者:曾探)学习总结,如想深入了解,请支持作者原版 单例模式 实现单例模式 单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的 ...

  9. JavaScript设计模式与开发实践 - 单例模式

    引言 本文摘自<JavaScript设计模式与开发实践> 在传统开发工程师眼里,单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返 ...

最新文章

  1. 借助线下渠道逆袭?小米的愿望恐成镜花水月!
  2. MPB:湖南师大尹佳组-​乳酸菌对酸和胆碱盐的耐受能力
  3. Spark官方文档——本地编写并运行scala程序
  4. 转:Ubuntu下ibus-sunpinyin的安装及翻页快捷键设置!
  5. Spring Cloud是什么,和Dubbo对比呢?
  6. LeetCode 12/13 罗马数字与整型互转(哈希,贪心)
  7. element表格实现树形全选_很实用!word中全选的快捷键介绍及使用方法
  8. 给网站加上“新年快乐”灯笼源码
  9. Matlab中erf函数的用法
  10. SICNU ACM新生第一次考核
  11. 数据基础-索引和完整性(约束)
  12. 如何在iPhone和iPad上的Safari中在网页上查找文本
  13. 菜鸟之如何让项目跑起来(适合小白看,不是小白的不要进来看了,浪费时间)
  14. 解决方案和项目的区别_(实习招聘)PwC面试官问Advisory和Consulting有什么区别,怎么答?...
  15. PLC无线通讯方案,支持西门子,三菱,欧姆龙,台达等各品牌PLC
  16. 如何选择NTC热敏电阻
  17. 未来计算机的发展趋势展望,未来计算机发展的5种趋势
  18. Internet 上可用的“简单网络时间协议”时间服务器列表
  19. delphi FastReport fr3使用注意点
  20. Linux_shell——第5章 一团乱麻?没这回事

热门文章

  1. 量身定制规则引擎,适应多变业务场景
  2. rails3高级查询
  3. Android App定位和规避内存泄露方法研究
  4. Jquery LigerUI
  5. SWT中调用Automation的方式
  6. ajax 文件数据流,Ajax如何读取数据流中的xml文件?
  7. prd模板案例_第三课:产品需求文档——案例分析
  8. 视图属性+对象动画组件ViewPropertyObjectAnimator
  9. 利用DNS Zone Transfers漏洞工具dnswalk
  10. 直接操作游戏对象C#游戏开发