js设计模式总结-单例模式
单例模式
解决的问题
保证实例只有一个,避免多个实现,从全局来看,这个实例的状态是唯一的。
实现原理
设置一个变量来记录实例,通过检测该变量是否为空来决定是否创建实例
非透明单例
所谓非透明就是用户在使用前必须知道这是一个单例类,不使用new来获取实例
    var Single = function() {}
    Single.instance = null
    Single.getInstance = function() {
        if (this.instance) {
            return this.instance
        }
        return this.instance = new Single()
    }
    var a = Single.getInstance()
    var b = Single.getInstance()
    a === b  //true
透明单例
其优点是创建实例时对用户透明,虽然多次new,但实际指向一个实例
    var Single = (function() {
        var instance = null
        return function() {
            if (instance) {
                return instance
            }
            return instance = this
        }
    })()
    var a = new Single()
    var b = new Single()
    a === b    // true
使用代理模式实现单例
上述实现单例的缺点是 单例的判断和实例的实现耦合在一起 ,特别是在构造函数传参数的时候。因此,不符合单一职责原则,
采用代理的方式来将单例的判断和实例的实现解耦。
    // 真正的构造函数,负责真正的实例实现
    var _Single = function(option) {
        this.name = option.name
    }
    // 代理构造函数,主要负责单例判断
    var Single = (function() {
        var instance = null
        return function(option) {
            if (instance) return instance
            return instance = new _Single(option)
        }
    })()
实践中的应用
个人理解,单例模式主要是用于约束实例状态的唯一性,避免存在多个实例从而有多个状态。
因此,单例更多用于系统层面的全局功能,比如模态窗口。
js设计模式总结-单例模式的更多相关文章
- [JS设计模式]:单例模式(1)
		什么是单例模式 所谓单例,就是一个类只有一个实例,实现的方法一般是先判断是否存在实例,如果存在就直接返回,如果不存在就创建了再返回.这样确保了一个类只有一个实例对象. 实现的单例有很多种方式,最简单的 ... 
- JS设计模式之---单例模式
		单例模式是保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式在现在面向对象的语言Java,C#,C++等等中也有很多用到,其实它在Javascript中使用同样非常广泛. var Cre ... 
- JS设计模式之单例模式
		单例模式 单例模式的定义是:保证一个类只有一个实例,并提供一个访问它的全局访问点.比如说购物车,在一个商城中,我们只需要一个购物车,购物车在整个商城中是唯一的,不需要多次创建,即使多次点击购物车按钮, ... 
- JS 设计模式二 -- 单例模式
		单例模式 概念 单例模式 就是保证一个类只有一个实例,并提供一个访问它的全局访问点. 实现方法 先判断实例是否存在,如果存在直接返回,如果不存在就创建实例后在返回,确保了一个类只有一个实例对象. va ... 
- 浅谈js设计模式之单例模式
		单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池.全局缓存.浏览器中的 window 对象等.在 JavaS ... 
- JS设计模式之单例模式(一)
		单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这 就确保了一个类只有一个实例对象. 在JavaScript里,实现单例的方式有很多种, ... 
- Js常用的设计模式(1)——单例模式
		<Practical Common Lisp>的作者 Peter Seibel 曾说,如果你需要一种模式,那一定是哪里出了问题.他所说的问题是指因为语言的天生缺陷,不得不去寻求和总结一种通 ... 
- JS设计模式(一)
		刚入职时,看过一段时间的设计模式,似懂非懂.不知不觉过去七个月了,对JS的理解更深刻了,数据结构与算法的基础也基本上算是过了一遍了,接下来要把设计模式搞定,然后不再深层次研究JS了,而是学习前端自动化 ... 
- js设计模式总结1
		js设计模式有很多种,知道不代表会用,更不代表理解,为了更好的理解每个设计模式,对每个设计模式进行总结,以后只要看到总结,就能知道该设计模式的作用,以及模式存在的优缺点,使用范围. 本文主要参考张容铭 ... 
随机推荐
- JQuery插件开发简单实例
			经常使用Jquery的各种插件,却对如何开发插件一无所知,以为是一件很麻烦的事儿?其实不然,下面通过一个简单的实例,来看一下Jquery Plugin的开发. 先看DEMO:动画菜单 不用插件如何实现 ... 
- ios - kvo观察者示例
			首先创建Person分类 #import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatom ... 
- python-study1 in hubei
			1.安装好python后要配置环境变量(C:\Python27\Scripts---能找到pip.exe和easy_install.exe和C:\Python27---能找到python.exe) 2 ... 
- Tomcat使用,部署
			Tomcat服务器基本使用 web服务软件,也叫web服务器软件,web服务器. 基本使用 1)下载 到apache官网下载. http://www.apache.org 安装版本:window e ... 
- gulp外挂 uglify   的使用
			1.js文件压缩 第一步:安装外挂 : 第二步:gulpfile.js 配置 : (首先看你的package.json 中有没有添加依赖,如果有 这一句,代表添加成功啦.) 输入以下代码 : var ... 
- Unreleased Resource(未释放资源)-Streams(流)
			java中把不同的输入/输出源(键盘.文件.网络连接等)抽象表现为Stream(流). java程序可以通过使用不同的流来访问不同的输入/输出源.而Stream(流)可以直观的理解为从数据的源(Sou ... 
- h5视频上传之前端视频压缩研究
			今天领导接到一个h5上传手机视频的需求,主要是要看用户在这个视频中有没有完成某个任务,比如投篮进了几个球. 但是由于手机拍摄的视频文件大小有点大,直接上传的话,用户流量顶不住,而且特别耗时,在这样的情 ... 
- npm Scripts使用教程【译】
			Why npm Scripts? 原文发表于 2016.2.12,原文地址: https://css-tricks.com/why-npm-scripts/ 以下是访客Damon Bauer发布的一篇 ... 
- JS倒计时功能,给定时间返回规定格式倒计时时间
			重写了一下,增强了通用性,重写时发现月份和年份计算很复杂,因为月份天数不一样,年份又涉及平年闰年; 本人数学实在不佳无法写出算法,哪位大大日后写出来了分享给小弟一份,谢谢~. <!doctype ... 
- SOSO街景地图 API (Javascript)开发教程(1)- 街景
			SOSO街景地图 Javascript API 干什么用的? 你想在网页里嵌入个地图,就需要它了! 另外,它还支持:地点搜索.周边/附近查询.地图标注.公交/驾车路线规划.地理坐标与地址相互转换.地理 ... 
