单例模式:

定义:单例模式之所以这么叫,是因为它限制一个类只能有一个实例化对象。

实现方法:判断实例是否存在,如果存在则直接返回,如果不存在就创建了再返回。(确保一个类只有一个实例对象)

特点: 命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象

实现单例的方式

一丶对象字面量

var hero = {

name : "timo"

sex : "male"

method: function(){

console.log("提莫队长正在送命")

 }

}

二丶添加私有成员和方法,然后使用闭包在内部封装这些变量

var hero = function(){

/*私有变量和方法*/

var word = '提莫队长正在送命'

function tell(){

console.log(word)

}

公有变量和方法

return{

told: function(){

tell();

},

dead: "Public string"

}

}

var hero = hero()

hero.told() //队长正在送命

console.log(hero.dead) //Public string

 

三丶如果我们想做到只有在使用的时候才初始化,构造函数初始化=>为了节约资源

var timo = (function(){

var inittimo;

function init(){

/*定义单例*/

return {

dead: function(){

console.log("Public dead")

}

word: "提莫队长正在送命"

}

}

return {

getinit: function(){

if(!inittimo){

inittimo = init()

}

return inittimo;

}

}

})();

/*调用公有的方法来获取实例*/
timo.getinit().init()

  


单例模式的使用场景

系统间各种模式的通信协调上

var SingletonTester = (function () {

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

  我所理解的单例模式,相当于一个命名空间,可以管理代码库的各个模块,比如Vuex里的Module。还有jquery,也是封装好的一个单例。

【javascript】javascript设计模式之单例模式的更多相关文章

  1. JavaScript设计模式之单例模式

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

  2. JavaScript设计模式之单例模式【惰性单例】

    在提高开发水平,往中高级前端工程师中,利用设计模式是必不可少的一条道路.掌握设计模式的思想远远比硬套重要,因为设计模式是一种思想,不局限于开发语言.但实际上由于语言的特性不同,往往在实现的时候会有不少 ...

  3. 7 种 Javascript 常用设计模式学习笔记

    7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...

  4. javascript事件设计模式

    JavaScript事件设计模式 http://plkong.iteye.com/blog/213543 http://www.docin.com/p-696665922.html

  5. [JS设计模式]:单例模式(1)

    什么是单例模式 所谓单例,就是一个类只有一个实例,实现的方法一般是先判断是否存在实例,如果存在就直接返回,如果不存在就创建了再返回.这样确保了一个类只有一个实例对象. 实现的单例有很多种方式,最简单的 ...

  6. 浅谈js设计模式之单例模式

    单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池.全局缓存.浏览器中的 window 对象等.在 JavaS ...

  7. 设计模式之单例模式(Singleton)

    设计模式之单例模式(Singleton) 设计模式是前辈的一些经验总结之后的精髓,学习设计模式可以针对不同的问题给出更加优雅的解答 单例模式可分为俩种:懒汉模式和饿汉模式.俩种模式分别有不同的优势和缺 ...

  8. GJM : C#设计模式(1)——单例模式

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  9. java设计模式之单例模式(几种写法及比较)

    概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...

  10. 每天一个设计模式-4 单例模式(Singleton)

    每天一个设计模式-4 单例模式(Singleton) 1.实际生活的例子 有一天,你的自行车的某个螺丝钉松了,修车铺离你家比较远,而附近的五金店有卖扳手:因此,你决定去五金店买一个扳手,自己把螺丝钉固 ...

随机推荐

  1. eclipse如何设置时常挂提示

    (.qwertyuiopasdfghjklzxcvbnm) ​​​

  2. 并发编程>>四种实现方式(三)

    概述 1.继承Thread 2.实现Runable接口 3.实现Callable接口通过FutureTask包装器来创建Thread线程 4.通过Executor框架实现多线程的结构化,即线程池实现. ...

  3. HttpURLConnection发送GET、POST请求

    HttpURLConnection发送GET.POST请求 /** * GET请求 * * @param requestUrl 请求地址 * @return */ public String get( ...

  4. [转] HBase异常:hbase-default.xml file seems to be for an old version of HBase

    [From] https://blog.yoodb.com/yoodb/article/detail/157 使用HBase Java Client连接HBase服务端创建Configuration对 ...

  5. ElasticSearch 问题分析:No data nodes with HTTP-enabled available

    环境:ES-5.4.0版本,部署方式:3master node+2client node+3data node 说明:data node和client node都配置了http.enabled: fa ...

  6. SpringMVC 过滤器

    参考: http://qq-22530757.iteye.com/blog/2177513 http://www.jdon.com/dl/best/spring-security.html https ...

  7. Install Papirus Icon Theme on Ubuntu

    sudo add-apt-repository ppa:papirus/papirus sudo apt update && sudo apt install papirus-icon ...

  8. casperjs问题收集

    1 无妨访问某些页面可能是ssl选项没有使用 casperjs --ignore-ssl-errors=true --ssl-protocol=any 你的测试文件

  9. js中in关键字的用法

    1. 在For...In 声明用于对数组或者对象的属性进行循环/迭代操作. 例子:var a = new Array; for(x in a){ console.log(x); } 2. 判断对象是否 ...

  10. ASP.NET MVC Core的TagHelper(基础篇)

    TagHelper又是一个新的名词,它替代了自之前MVC版本的HtmlHelper,专注于在cshmlt中辅助生成html标记. 通过使用自定义的TagHelper可以提供自定义的Html属性或元素, ...