JavaScript设计模式学习之单例模式
2015-11-04 20:27
661 查看
一、单例模式介绍
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。-----百度百科
单例模式实现思路:
单例模式的实现原理是在singleton模式下,如果该实例不存在,可以通过一个方法创建一个类来实现创建类的新实例,如果实例已经存在,它会返回该对象的引用
二、单例模式的JavaScript实现
标准实现方法:/*singleton Pattern 单例模式经典实现*/ var singleton = (function(){ //实例保持一个singleton的引用 var instance; function init(){ //私有变量 function privateMethod() { console.log("i am private method"); } var privateName = "Gabriel chen"; var privateAge = "21"; var random = Math.random(); return { //公有变量和方法 publicHobby : "coding javascript", publicFriend : "chrome", publicGetAge : function(){return privateAge}, getRandom : function(){ return random} }; }; return { //single实现原理,检查singleton实例,存在返回,不存在新建 getInstance : function(){ if(!instance){ instance = init(); } return instance; } } //立即调用初始化 })() var s1= singleton.getInstance(); var s2 = singleton.getInstance(); console.log(s1.getRandom()===s2.getRandom());
实现方法二:闭包方式
var single = (function(){ var unique; function Construct(){ // ... 生成单例的构造函数的代码 //私有变量 var privateName = "陈"; var random = Math.random(); //公有方法和变量 this.name = "chen"; this.age="21"; this.getPri =function(){return privateName}; this.getRandom =function(){return random}; } unique = new Construct(); return unique; })(); var s1 = single; var s2 = single ; s1.name = "siming" ; console.log(s2.getRandom()===s1.getRandom())
三、单例模式的应用场景
//网站计数器 var myCounter = (function(){ var counter; function init(){ var count = 0; this.addCount=function(){ count=count+1; }; this.getCount = function(){ return count; }; return this; } return { getCounter : function(){ if (!counter) { counter = init(); } return counter; } } })(); var c = myCounter.getCounter(); c.addCount(); c.addCount(); var b = myCounter.getCounter(); b.getCount();
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- PropertyChangeListener简单理解
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法