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

普通的单例模式:
  使用一个变量来标记当前是否已经为某个类创建过对象,如果是的话,在下一次获取该类的实例时,直接返回之前创建的对象。
比如:使用一个变量instance标记是否创建了这个类对象,现在需要用到一个Single类,先判断instance是否为null,若不是则直接return返回,若是则new Singleton();

var instance = null;
return function(){if(!instance){instance = new Singleton();}return instance;
}

JavaScript中,我们经常会把全局变量当成单例来使用,但全局变量容易造成命名空间污染,使用命名空间可以减少全局变量的数量。

我们常在管理命名空间时使用单例模式,它可以降低你在代码中创建全局变量的数量。

惰性单例:在需要的时候才创建对象实例。(非常有用)
通用的惰性单例:
  首先是管理单例逻辑封装在getSingle中,创建对象的方法fn被当作参数动态传入

var getSingle = function(fn){var result;return function(){return result || (result = fn.apply(this,arguments));}
};

fn可以是创建弹窗的方法createDialog或者其他方法,传入getSingle后,返回一个新的函数,并且用一个变量result保存fn的结果,因为result在闭包中,所以它永远不会被销毁,如果result已经被赋值,那么它将返回这个值。

var createDialog = function(){//创建Dialog代码
}
document.getElementById("btn").onclick = function(){var dialogLayer = getSingle(createDialog);//这样创建好Dialog了
}

把创建实例对象和管理对象分别放置在两个方法里,这两个方法可以独立变化而互不影响,减低耦合。这两个方法组合起来才具有单例模式的神奇作用
这种单例模式的用途不止创建对象,可以用于“一次绑定事件”,还有其他。。

转载于:https://www.cnblogs.com/boliang/p/4818262.html

Javascript设计模式学习二(单例)相关推荐

  1. 设计模式学习笔记——单例(Singleton)模式

    设计模式学习笔记--单例(Singleton)模式 @(设计模式)[设计模式, 单例模式, Singleton, 懒汉式, 饿汉式] 设计模式学习笔记单例Singleton模式 基本介绍 单例案例 类 ...

  2. iOS中常见的设计模式(MVC/单例/委托/观察者)

    关于设计模式这个问题,在网上也找过一些资料,下面是我自己总结的,分享给大家 如果你刚接触设计模式,我们有好消息告诉你!首先,多亏了Cocoa的构建方式,你已经使用了许多的设计模式以及被鼓励的最佳实践. ...

  3. 设计模式C#描述——单例与多例模式

    设计模式C#描述--单例与多例模式 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式有以下特点: 单例类只能有一个实例. 单例 ...

  4. PHP设计模式 二 (单例 工厂 注册)

    单例模式 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源. ...

  5. python 与设计模式 ——工厂与单例

    python 与设计模式 源码地址:http://git.oschina.net/duoduo3_69/python_design_pattern git checkout v001(这个版本与此篇博 ...

  6. 单例设计模式-Enum枚举单例、原理源码解析以及反编译实战

    package com.learn.design.pattern.creational.singleton;/*** 这个类是Enum类型* 这个枚举非常简单* 枚举类是Object* 他在多线程的时 ...

  7. java中单例设计模式登记式单例类_java23种设计模式-创建型模式之单例模式

    单例模式(Singleton) 单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处: 1.某些类创建比较频 ...

  8. JavaScript设计模式(二)之单例模式

    一.单例模式的定义 单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建后再返回,这就确保了一个类只有一个实例对象.在JavaScript里,单例作为 ...

  9. 多个if用什么设计模式_抽丝剥茧——单例设计模式

    单例设计模式 兄弟们好,今天是最后一个设计模式了,也是我们最熟悉的单例设计模式,可以说这个设计模式是我们最先接触到的设计模式了.想当年学习JavaSE的时候,老师聊到一个「饿汉式和懒汉式」,我还纠结了 ...

最新文章

  1. linux mint 相关环境配置
  2. python装饰器函数-【python3】 函数 装饰器
  3. csdn第4名靠转载上位
  4. 小心 HttpClient 中的 FormUrlEncodeContent 的 bug
  5. python安装pyecharts清华_基于Python安装pyecharts所遇的问题及解决方法
  6. 精选论文集:三维点云有哪些必读的论文?
  7. JavaScript字符编码
  8. 光敏传感器实验报告_光敏传感器光电特性研究实验报告.docx
  9. 植物大战僵尸实训记录
  10. vue 使用html2canvas实现图片合成,将两张图片合成一张,并下载海报
  11. jenkins k8s 动态增减 jenkins-salve (2) 实现 slave 节点动态构建
  12. 电子日历插件(阳历转阴历工具...)
  13. IT外企那点儿事(12):也说跳槽
  14. 群晖NAS教程(二十一)、利用Docker安装DDNS动态域名解析,自动更新域名解析到公网IP(支持阿里云、腾讯云dnspod、Cloudflare、华为云)
  15. 漫谈递归——递归需要满足的两个条件
  16. pytorch入门学习(四)-----计算图与动态图
  17. YX4057C芯片资料
  18. 安卓 build.prop 进行修改提高性能
  19. 出师一表通今古,夜半挑灯更细看
  20. 切图?切图!——切图仔htmlcss秃头指南

热门文章

  1. 求1到100的奇数之和c语言,C语言实现1到100的和奇数与偶数和
  2. sql重命名数据库_SQL重命名数据库
  3. sql选择题_SQL选择
  4. jsf 导航_JSF动作方法导航示例教程– from-action标记
  5. 开课吧:Html5有哪些新特性?
  6. 最近很多面试都是考研凉凉的,心塞!
  7. java 之 观察者模式(大话设计模式)
  8. redis教程(七)之redis List
  9. 2014牡丹江——Hierarchical Notation
  10. iOS6和iOS7适应代码(6) —— NSLocalizedString