JavaScript设计模式学习之单例模式
一、单例模式介绍
二、单例模式的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();
JavaScript设计模式学习之单例模式的更多相关文章
- javascript设计模式学习之四——单例模式,缓存与对象池
单例模式的定义:确保一个实例,并提供全局访问. 惰性单例的定义:只在需要的时候才创建对象. 在开发中,有些对象往往只需要一个,比如线程池.全局缓存.浏览器中的window对象等. java中的单例 关 ...
- C#设计模式学习笔记-单例模式随笔
最近学习 设计模式,从单例模式入手 啥是单例模式: 要实现一个单例类的话,首先,肯定是不能让用户自行生产的,那就是说明不能让用户new,所以,就必须把构造函数设置成为私有的 因为静态变量的生命周期跟整 ...
- C#设计模式学习笔记-单例模式(转)
C#设计模式学习笔记-单例模式 http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html 最近在学设计模式,学到创建型模式的时候,碰到 ...
- Javascript设计模式学习一
学习Javascript设计模式之前,需要先了解一些相关知识,面向对象的基础知识.this等重要概念,以及掌握一些函数式编程的技巧. Js多态 多态的思想:实际上是把“做什么”和“谁去做”分离开来.例 ...
- 【Javascript设计模式1】-单例模式
<parctical common lisp>的作者曾说,如果你需要一种模式,那一定是哪里出了问题.他所说的问题是指因为语言的天生缺陷,不得不去寻求和总结一种通用的解决方案. 不管是弱类型 ...
- JavaScript设计模式学习之路——面向对象的思想
今天,我拿到了张容铭写的这本<JavaScript设计模式>这本书,开始了关于JavaScript更深一点的学习. 看到这本书开始的时候,虽然之前通过看书.一些比较好的视频的讲解,对Jav ...
- JavaScript设计模式学习笔记
1 JavaScript设计模式深入分析 私有属性和方法:函数有作用域,在函数内用var 关键字声明的变量在外部无法访问,私有属性和方法本质就是你希望在对象外部无法访问的变量. 特权属性和方法:创建属 ...
- javascript设计模式学习之十二——享元模式
一.享元模式的定义及使用场景 享元模式是为了解决性能问题而诞生的设计模式,这和大部分设计模式为了提高程序复用性的原因不太一样,如果系统中因为创建了大量类似对象而导致内存占用过高,享元模式就非常有用了. ...
- javascript设计模式学习之九——命令模式
一.命令模式使用场景及定义 命令模式常见的使用场景是:有时候需要向某些对象发送请求,但是并不知道请求的接受者是谁,也不知道请求的具体操作是什么.此时希望用一种松耦合的方式来设计程序,使得请求的发送者和 ...
随机推荐
- tensorflow学习笔记(4)-学习率
tensorflow学习笔记(4)-学习率 首先学习率如下图 所以在实际运用中我们会使用指数衰减的学习率 在tf中有这样一个函数 tf.train.exponential_decay(learning ...
- openstack架构
终于正式进入 OpenStack 部分了. 今天开始,CloudMan 将带着大家一步一步揭开 OpenStack 的神秘面纱. OpenStack 已经走过了 6 个年头. 每半年会发布一个版本,版 ...
- [C++] OOP - Access Control and Class Scope
Access Control And Inheritance Protected Member Like private, protected members are unaccessible to ...
- HttpServletRequest和HttpServletResponse实例
先看一下web.xml文件配置: <?xml version="1.0" encoding="UTF-8"?> <web-app versio ...
- java---StringBuilder类的用法(转载)
转载自http://blog.csdn.net/zi_jun/article/details/7624999 String对象是不可改变的.每次使用 System.String类中的方法之一时,都要在 ...
- TCP 接收窗口自动调节
https://technet.microsoft.com/zh-cn/magazine/2007.01.cableguy.aspx 欢迎来到 TechNet 杂志“网络专家”的第一部分.TechNe ...
- 【Docker 命令】- login 命令
docker login : 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub docker logout : 登出一个Docker镜像仓库,如果未指定镜像 ...
- printf以及各种变种
int printf(char *format, [argument]); 其向终端(显示器.控制台等)输出字符 int fprintf(FILE*stream, const char*format, ...
- 如何高效的使用Google
文章再转自知乎:http://www.zhihu.com/question/20161362
- usebean 使用语法