javascript设计模式-单体模式
场景:假设有一个Girl(美女)实体,该实体拥有姓名、年龄两个属性,拥有显示姓名和洗澡两个方法,下面分步骤构造该实体。
1、用简单基本单体模式:
var Girl1 = {
name:"昭君",
age:33,
showName:function(){
alert("我的名字是:" + this.name);
},
bathe:function(){
console.log("我是" + this.name + ",我在洗澡!");
}
}
console.log("Girl.age=" +Girl1.age);
Girl1.bathe();
问题:美女的名字和洗澡这么隐私的是不能随便被访问的吧,那就要用到(私用成员的单体)
//使用下划线表示法
1 var Girl2 = {
name:"昭君",
_age:33,
showName:function(){
console.log("我的名字是:" + this.name);
},
_bathe:function(){
console.log("我是" + this.name + ",我在洗澡!");
}
}
console.log("Girl2.name=" +Girl2.name);//Girl3.name=昭君
console.log("Girl2.age=" +Girl2.age); //Girl.age=undefined
Girl2.showName();//我的名字是:昭君
Girl2.bathe();//Uncaught TypeError: Gird2.bathe is not a function
问题:如果我很猥琐,在洗澡的方法前面加一个下横线,那不是偷窥成功了吗?快使用闭包吧
//使用闭包
var Gird3 = (function(){
var age = 33;
function bathe(){
console.log("我是" + this.name + ",我在洗澡!");
}
return {
name:"昭君",
showName:function(){
console.log("我的名字是:" + this.name);
}
}
})();
console.log("Girl3.name=" +Gird3.name);//Girl3.name=昭君
console.log("Girl3.age=" +Gird3.age); //Girl.age=undefined
Gird3.showName();//我的名字是:昭君
Gird3.bathe();//Uncaught TypeError: Gird3.bathe is not a function
结果:完美
但是,美女是用来怜惜的,没事儿的时候可别随便拿出来秀哟,那我们就用惰性加载吧!!!
//惰性实例化
var Gird4 = (function(){
var girl = null;
function constructor(){
var age = 33;
function bathe(){
console.log("我是" + this.name + ",我在洗澡!");
}
return {
name:"昭君",
showName:function(){
console.log("我的名字是:" + this.name);
}
}
}
return {
getInstance:function(){
if(girl) return girl;
return constructor();
}
} })();
Gird4.getInstance().showName();
javascript设计模式-单体模式的更多相关文章
- 读书笔记之 - javascript 设计模式 - 单体模式
单体是一个用来划分命名空间,并将一批相关方法和属性组织在一起的对象,如果它可以被实例化,那么它只能被实例化一次. 单体模式,就是将代码组织为一个逻辑单元,这个逻辑单元中的代码可以通过单一的变量进行访问 ...
- JavaScript设计模式——单体模式
一:单体模式简介: 是什么:将代码组织为一个逻辑单元,这个单元中的代码通过单一的变量进行访问.只要单体对象存在一份实例,就可以确信自己的所有代码使用的是同样的全局资源. 用途:1.用来划分命名空间,减 ...
- 设计模式-单体模式(C++)
设计模式-单体模式 单体模式在使用非常方便,适合于单一的对象,例如全局对象的抽象使用. 需要注意的是单体模式不可继承 // 实现 Singleton.h #ifndef __SINGLETON_H__ ...
- js设计模式--单体模式
GOF里的23种设计模式, 也是在软件开发中早就存在并反复使用的模式. 如果程序员没有明确意识到他使用过某些模式, 那么下次他也许会错过更合适的设计 (这段话来自<松本行弘的程序世界>). ...
- javascript 设计模式-----策略模式
在<javascript设计模式>中,作者并没有向我们介绍策略模式,然而它却是一种在开发中十分常见的设计模式.最常见的就是当我们遇到一个复杂的表单验证的时候,常常需要编写一大段的if和el ...
- JavaScript设计模式 - 迭代器模式
迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示. 迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺 ...
- JavaScript设计模式 - 代理模式
代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问 代理模式的用处(个人理解):为了保障当前对象的单一职责(相对独立性),而需要创建另一个对象来处理调用当前对象之前的一些逻辑以提高代码的效 ...
- javascript中单体模式的实现
单体模式作为一种软件开发模式在众多面向对象语言中得到了广泛的使用,在javascript中,单体模式也是使用非常广泛的,但是由于javascript语言拥有其独特的面向对象方式,导致其和一些传统面向对 ...
- 读书笔记之 - javascript 设计模式 - 代理模式
代理(proxy)是一个对象,它可以用来控制对另一对象的访问.它与另外那个对象实现了同样的接口,并且会把任何方法调用传递给那个对象.另外那个对象通常称为本体.代理可以代替本体被实例化,并使其可被远程访 ...
随机推荐
- SiftGPU:编译SiftGPU出现问题-无法解析的外部符号 glutInit
OpenCV出现了ORB特征和SURF的GPU版本, 参考:opencv上gpu版surf特征点与orb特征点提取及匹配实例至于使用什么并行API暂时没有探究. 但没有发现OpenCV-SIFT的GP ...
- Java Web_过滤器
过滤器分类: Servlet2.5: request:用户直接访问页面时,Web容器将会调用过滤器. forward:目标资源是通过RequestDispatcher的forward访问时,该过滤器将 ...
- sql 查询替换字符
Select A,B,C from Tb1 –查询所有 Select A,replace(B,’1’,’壹’),C from Tb1 替换查询 Tb1 A B C AA1 1 CC A ...
- Vue双向数据绑定实现原理
https://zendq1998.github.io/2018/04/12/vue%E5%8F%8C%E5%90%91%E6%95%B0%E6%8D%AE%E7%BB%91%E5%AE%9A%E5% ...
- wx小程序开发 1:小程序代码构成
官网学习地址:https://developers.weixin.qq.com/miniprogram/dev/quickstart/basic/introduction.html 1: 2:待续.. ...
- 模拟登录新浪微博(Python)
PC 登录新浪微博时, 在客户端用js预先对用户名.密码都进行了加密, 而且在POST之前会GET 一组参数,这也将作为POST_DATA 的一部分. 这样, 就不能用通常的那种简单方法来模拟POST ...
- 拓扑排序(Topological Order)
Date:2019-06-17 14:43:59 算法描述 1.定义队列Q,并把所有入度为0的结点加入队列 2.取队首结点,输出.然后删除所有从它除法的边,并令这些边到达的顶点的入度-1,若某个顶点的 ...
- appium的等待
在自动化过程中,元素出现受网络环境,设备性能等多种因素影响.因此元素加载的时间可能不一致,从而会导致元素无法定位超时报错,但是实际上元素是正常加载了的,只是出现时间晚一点而已.那么如何解决这个问题呢? ...
- Cache占用过多内存导致Linux系统内存不足问题排查
问题描述 Linux服务器内存使用量超过阈值,触发报警. 问题排查 首先,通过free命令观察系统的内存使用情况,显示如下: total used free shared buffers cached ...
- marquee图片无缝拼接滚动
marquee图片无缝滚动 先了解一下对象的几个的属性: innerHTML: 设置或获取位于对象起始和结束标签内的 HTML scrollHeight: 获取对象的滚动高度. scrollL ...