单例模式

单例模式(Singleton) :

又被称为单体模式,是只允许实例化一次的对象类。一个类有且仅有一个实例,并且自行实例化向整个系统提供。

命名空间

单例模式可能是JavaScript中我们最常见的一种模式了,这种模式经常为我们提供一个命名空间,比如我们经常使用jQuery。

下面我们来看看具体的示例吧:

var MyQuery={
$:function(id){
return document.getElementById(id);
},
css:function(id,key,value){
this.$(id).style[key]=value;
}
}

在实例中,我们创建了一个叫MyQuery对象,分别添加了两个方法一个用来获取指定id的元素,一个更具id修改指定元素的样式

现在我们测试一下

console.log(MyQuery.$('container'));
MyQuery.css('container','backgroundColor','red');

代码库

其实在JavaScript中单例模式除了像我们现在这样定义一个命名空间外,还有就是可以通过单例模式来管理代码库的各个模块。

我们来看一个简单的例子:

var functionLibrary={
checkLibrary:{
checkName:function(){console.log("检查名称")},
checkEmail:function(){console.log("检查邮箱")}
},
imageHandle:{
cutImage:function(){console.log("剪切图片")},
compressImage:function(){console.log("压缩图片")}
}
}

我们大致简单的创建了一个小型方法库,在里面简单的添加了验证方法库,和图像处理库,我们调用起来也非常的方便。

functionLibrary.checkLibrary.checkEmail();//检查邮箱

管理静态变量

使用单例模式可以让我们在代码管理上如虎添翼,但是如果我们仅仅认为单例模式就只能做这些,那就太小看它了。

单例模式还能帮我们管理 静态变量 ,我们知道javascript中没有面向对象语言中的static这类关键字,所以理论上我们定义的任何变量都是可以更改的,那么万一我们不小心覆盖了一个我们本不该改变的全局变量的值,那么可能又需要花费时间去调试找错误,所以在javascript中创建静态变量也显得尤为重要。

虽然javascript没有static关键字,但是它的灵活可以让我们模仿出静态变量的效果,下面我们来看具体的示例:

var StaticValue=(function(){
var staticValue={
staticNum:1
}
return{
get:function(name){
return staticValue[name]?staticValue[name]:null;
}
}
})();

我们通过闭包的方式实现了一个简单的静态变量效果,现在我们调用一下

var num=StaticValue.get('staticNum');
console.log(num);//1

现在我们如果没有特定的方法就无法更改StaticValue.get('staticNum')的值了,这样我们就简单的模仿出了静态变量的效果。

惰性单例

在单例模式中还有一种延迟创建的形式,我们称之为惰性单例,也可以叫惰性创建。有的时候,我们需要延迟创建我们的单例对象,这个时候,我们就可以用到它

惰性载入单例

var LazySingle=(function(){
//单例实例引用
var instance=null;
//单例
function Single(){
//定义私有属性和方法
return{
privateMethod:function(){},
privatePrototype:'1.0'
}
}
//获取单例对象接口
return function(){
if(!instance){
instance=Single();
}
//返回单例
return instance;
}
})();

我们测试一下

console.log(LazySingle().privatePrototype);//1.0

总结

单例模式有时也被称为单体模式,它是一个只允许实例化一次的对象类,在javascript中我们经常把单例模式作为命名空间对象来实现,通过单例模式,我们可以创建消息方法库把各个模块的代码仅仅有条的梳理在一起,我们还能通过单例模式模拟实现static效果。

如果您想让您的系统里只存在一个对象,那么单例模式则是最佳的解决方案。

也谢谢大家看到这里:)如果你觉得我的分享还可以请点击推荐,分享给你的朋友让我们一起进步~

好了以上就是本次分享的全部内容,本次示例参考自JavaScript设计模式一书,让我们一点点积累一点点成长,希望对大家有所帮助。

欢迎转载,转载请注明作者,原文出处。

再起航,我的学习笔记之JavaScript设计模式10(单例模式)的更多相关文章

  1. 再起航,我的学习笔记之JavaScript设计模式02

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 我们 ...

  2. 再起航,我的学习笔记之JavaScript设计模式01

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 在通 ...

  3. 再起航,我的学习笔记之JavaScript设计模式03

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 上一 ...

  4. 再起航,我的学习笔记之JavaScript设计模式04

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 上回 ...

  5. 再起航,我的学习笔记之JavaScript设计模式05(简单工程模式)

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前几 ...

  6. 再起航,我的学习笔记之JavaScript设计模式06(工厂方法模式)

    上一次已经给大家介绍了简单工厂模式,相信大家对创建型设计模式有了初步的了解,本次我将给大家介绍的是工厂方法模式. 工厂方法模式 工厂方法模式(Factory Method):通过对产品类的抽象使其创建 ...

  7. 再起航,我的学习笔记之JavaScript设计模式05(简单工厂模式)

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前几 ...

  8. 再起航,我的学习笔记之JavaScript设计模式06(抽象工厂模式)

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前两 ...

  9. 再起航,我的学习笔记之JavaScript设计模式08(建造者模式)

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前几 ...

随机推荐

  1. (转载)JProfiler试用手记

    JProfiler是一款Java的性能监控工具.可以查看当前应用的对象.对象引用.内存.CPU使用情况.线程.线程运行情况(阻塞.等待等),同时可以查找应用内存使用得热点,这里提供有几篇文章供参考:获 ...

  2. mac下,mysql5.7.18连接出错,错误信息为:Access denied for user 'root'@'localhost' (using password: YES)

    mac下,mysql5.7.18连接出错,错误信息为:Access denied for user 'root'@'localhost' (using password: YES)()里面的为shel ...

  3. volume 生命周期管理 - 每天5分钟玩转 Docker 容器技术(44)

    Data Volume 中存放的是重要的应用数据,如何管理 volume 对应用至关重要.前面我们主要关注的是 volume 的创建.共享和使用,本节将讨论如何备份.恢复.迁移和销毁 volume. ...

  4. 配置HTTPS服务

    环境为CentOS 7.3.httpd2.4.6 一 搭建证书 说明: CA 主机为192.168.29.3 client主机为 192.168.29.100 1 生成私钥 [root@centos7 ...

  5. (转)eclipse安装jetty

    背景:在项目开发的过程中,一个老的项目使用的是jetty启动,在用tomcat启动的过程中出现了启动不了的异常,浪费了好多时间.因为项目一直是用jetty启动的,为了不浪费时间,也只好改变思路选择je ...

  6. (转)每天一个linux命令(8):cp 命令,复制文件和文件夹

    场景:自动部署脚本中为了部署方便,将配置文件放在服务器端,每次部署都使用服务端的配置文件覆盖上传上去的配置文件. cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一. 一般情况下,she ...

  7. (转)Eclipse快捷键 10个最有用的快捷键

    1 Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升. 1 ...

  8. 唠一唠Linux系统入门的方法和经验

    相信大伙都听说过linux系统,然而对于这个系统,总使让新手感觉茫然,偌大的系统.下面是一段百度中的介绍: Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用 ...

  9. 准备 overlay 网络实验环境 - 每天5分钟玩转 Docker 容器技术(49)

    为支持容器跨主机通信,Docker 提供了 overlay driver,使用户可以创建基于 VxLAN 的 overlay 网络.VxLAN 可将二层数据封装到 UDP 进行传输,VxLAN 提供与 ...

  10. 接口工具-POSTMAN

    前端的一项总要工作就是测试接口,当然这也可能是你们后台人员做的.不管怎样,都需要测试接口,那么就来介绍一款谷歌浏览器接口测试插件,postman.首先你要去谷歌的应用商店,搜索这个插件,(需要FQ), ...