singleton(单例)模式被熟知的原因是因为它限制了类的实例化次数只能一次,单例模式,在该实例不存在的勤快下,可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,则会简单返回该对象的引用。单例模式不同于静态类(或对象),因为我们可以推迟它们的初始化,这通常是因为它需要一些信息,而这些信息在初始化期间可能无法获取,对于没有察觉到之前的引用代码,它们不会提供方便检索方法,这是因为它既不是对象,也不是由一个single返回的类,而是一个结构,在js中,singleton充当共享资源命名空间,从全局命名空间中隔离出代码实现,从而函数提供单一访问点。

var mySingleton = (function () {//实例保持了singleton的一个引用var instacnce;function init() {//私有方法和变量funciton privateMethod(){//...}var privateVariable = "private";var privateRandomNumber = Math.random();/*这里定义单例代码*/return {//公有方法和变量publicMethod: function () {console.log('hello world');},publicProperty: 'test',getRandomNumber:function(){return privateRandomNumber;}};}return {//获取singleton的实例,如果存在就返回,不存在创建新的实例getInstance: function () {if (!instance) {instance= init();}return instance;}};
})();/*调用公有的方法来获取实例:*/
mySingleton .getInstance().publicMethod();

singleton模式适用性:

  1. 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时;
  2. 当唯一的实例应该是通过子类化可扩展的,并且客户应该无需要更改代码就能使用一个扩展的实例时。

    类的静态实例和singleton之间的区别:当singleton可以作为一个静态的实例实现时,它可以延迟构建,直到需要使用静态实例时,无需使用资源和内存。
    如果我们有一个可以直接被初始化的静态对象,需要确保执行代码顺序总是相同,当我们有大量的源文件时,它并不能伸缩。

在实践中,当在系统中确实需要一个对象来协调其他对象时,singleton模式是很有用的。

var SingletonTester = (function () {//参数:传递给单例的一个参数集合function Singleton(options) {//设置options变量为接收的参数或者为空(如果没有提供的话)options= options|| {};//设置name参数this.name = 'SingletonTester';//设置pointX的值this.pointX = options.pointX || 6; //从接收的参数里获取,或者设置为默认值//设置pointY的值this.pointY = options.pointY || 10;}//实例容器var instance;//静态变量和方法模拟var _static = {name: 'SingletonTester',//获取实例的方法//返回Singleton的实例getInstance: function (options) {if (instance === undefined) {instance = new Singleton(options);}return instance;}};return _static;
})();var singletonTest = SingletonTester.getInstance({ pointX: 5 });
console.log(singletonTest.pointX); // 输出 5 

singleton的存在往往表明系统中的模块要么是系统紧密耦合,要么是其逻辑过于分散在代码库中多个部分。由于一系列的问题:从隐藏的依赖到创建多个实例的难度、底层依赖的难度等等,singleton测试会更麻烦

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

  1. 设计模式学习之--Singleton(单例)模式

    1.Singleton单例模式,是一种责任型模式.这种模式,通过隐藏构造器和提供对创建对象的单个访问点,实现了将类的职责---创建一个担当着独一无二角色的对象(生产唯一实例),集中于类的单个实例中. ...

  2. 12Singleton(单例)模式

    技术交流QQ群:1027579432,欢迎你的加入! 1.对象性能模式 面向对象很好地解决了抽象的问题,但是必不可免地要付出一定的代价.对于通常情况来说,面向对象的成本大都可以忽略不计.但是某些情况, ...

  3. Javascript中的单例和模块模式

    在javascript中,单例(singleton)就是指只有一个实例的对象,而不需要用new关键字去创建一个对象示例.单例其实有点类似于C# /C++里面的静态类.在javascript中,是以对象 ...

  4. 游戏设计模式——C++单例类

    前言: 本文将探讨单例类设计模式,单例类的懒汉模式/饿汉模式,单例类的多线程安全性,最后将利用C++模板减少单例类代码量. 本文假设有一个Manager管理类,并以此为探究单例类的设计模式. 懒汉模式 ...

  5. lintcode:Singleton 单例

    题目: 单例 单例是最为最常见的设计模式之一.对于任何时刻,如果某个类只存在且最多存在一个具体的实例,那么我们称这种设计模式为单例.例如,对于 class Mouse (不是动物的mouse哦),我们 ...

  6. JAVA23种设计模式:单例设计模式【二】

    在有些系统中,为了节省内存资源,保证数据内容的一致性,对某些类要求只能创建一个实例,这就是所谓的单例模式 单例设计模式的定义与特点 定义: 指一个类只有一个实例 ,且该类能自行创建这个实列的一种模式. ...

  7. java软件设计模式只单例设计模式

    概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计 ...

  8. java单例设计模式懒汉_Java设计模式之单例设计模式(懒汉、饿汉)

    [toc] Java设计模式之单例设计模式(懒汉.饿汉) 相信面试过的初中级Java开发的朋友可能都有遇到过单例设计模式的笔试题吧,如果之前没有背下来或者不理解,可以看看下面这篇文章,应该足够应付笔试 ...

  9. 菜鸟学设计模式——小单例有大秘密

    欢迎大家关注我的新书<Spring Boot趣味实战课> 京东 当当 天猫 单例模式大家并不陌生,也都知道它分为什么懒汉式.饿汉式之类的.但是你对单例模式的理解足够透彻吗?今天我带大家一起 ...

最新文章

  1. Keycloak宣布不再适配Spring Boot和Spring Security
  2. JSP自定义标签开发与打包
  3. 如何精确评估开发时间的 4 个小套路?
  4. Sql server 数据转到 Mysql 数据库
  5. yum install php72w,yum 安装 php72w-pecl-imagick 报错
  6. design短语的用法总结_中考英语常考的重点句型及短语汇总,考前必备
  7. 学python有前途吗-python有前景吗
  8. php采集一言代码_用PHP制作api源码简单实现一言 / 随机一句功能
  9. Web前端面试指导(十七):一个满屏 品 字布局 如何设计?
  10. 电商网站后台九大功能模块详解
  11. “Defaulting to user installation because normal site-packages is not writeable“
  12. keras+卷积神经网络HWDB手写汉字识别
  13. 微信小程序-基于云开发实现社区项目(Demo版本的升级)
  14. 世界名模刘金金称赞续元金方是国宝,表示:振兴国医,义不容辞
  15. (30)zabbix Trapper 监控项配置
  16. MinIO入门-02 SpringBoot 整合MinIO并实现文件上传
  17. Set集合的概述及特点
  18. 计算机结构体系:循环展开题型 (非凭感觉的方法详解)
  19. js求(1~n)之间 素数之和
  20. 【微信早安定时推送消息】微信公众号定时推送早安消息 带天气、纪念日、生日、定时推送等(完整代码)

热门文章

  1. ajax回调给全局变量,jquery.Ajax回调成功后数据赋值给全局变量的问题
  2. c语言判断回文字符串递归,用递归实现判断一个字符串是否为回文串
  3. yolov2训练_Yolov2损失函数细节研究
  4. split出现得问题
  5. 几何画板怎样添加操作按钮
  6. [INS-20802] Oracle Net Configuration Assistant failed
  7. rhel5.4下编译安装python2..6.6 + mod_python
  8. 《需求规格说明书》业务描述活动图
  9. 约瑟夫问题(顺序表)
  10. 在国美购置iPad者可获差价1100元