title:设计模式之——单例模式
categories:tech
tag:[设计模式,编程]

模式名称

​ 所谓单例,即整个系统中只存在某个类的一个单一实例。

解决的问题(应用场景)

​ 单例模式是一种比较常见的设计模式,它也被应用在许多场景,它能够解决如下问题:

  • 命名空间管理:可以将一组有关联的属性和方法封装到一个单例中,方便命名管理,防止这些方法属性和其他类的实例的方法属性发生命名冲突。

  • 资源共享,由于有些实例的内存损耗比较大,一旦有多个实例,内存损耗就会非常严重,这时候,就可以使用单例模式来保证实例的唯一性,即每次调用和创建实例返回的都是内存中的同一个实例。

  • 保证实例的唯一性:有些实例整个系统中只能存在一个,否则会引起同步问题和操作冲突,这时就应该使用单例模式。

常见的应用场景:

  • windows的任务管理器就是一个单例,整个系统中只有这一个管理器实例,不可能有两个。(保证实例的唯一性)
  • jquery库的jquery包装对象本身就是一个单例。(命名空间管理)
  • 网站的计数器(资源共享)
  • 数据库连接池。(资源共享)
  • 操作系统的文件系统(保证实例的唯一性)

解决方案

​ 在实例化的时候检查是否已经存在该类的一个实例,如果存在,直接返回,如果不存在,才创建返回新实例。

代码示例(javascript):

var Singleton = (function () {var instantiated;function init() {/*这里定义单例代码*/return {publicMethod: function () {console.log('hello world');},publicProperty: 'test'};}return {getInstance: function () {if (!instantiated) {instantiated = init();}return instantiated;}};
})();/*调用公有的方法来获取实例:*/
Singleton.getInstance().publicMethod();}

效果

​ 在不使用单例模式的情况下,对一个类实例化多次,内存中就会存在多个实例,损耗会非常大,使用了单例模式以后,内存中只存在该类的一个实例,损耗就在可控范围内。另外一方面,每一个单例有独立的命名空间,整个系统的命名系统也变得很有秩序。

JS设计模式初探——单例模式相关推荐

  1. js设计模式之 单例模式与应用场景

    1.介绍 单例模式(Singleton Pattern)是设计模式中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创建自 ...

  2. JS设计模式---(单例模式篇)

    保证一个类只有一个实例,就叫做单例模式 应用场景: vuex 弹窗 问题来了:如果保证一个类只有一个实例呢? 我们先看正常情况下的创建实例 class singleClass{single(){con ...

  3. js observer 添加_简单了解4种JS设计模式

    阅读本文约需要5分钟 大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了15款有用前端开发的ST插件的知识,今天跟大家分享下4种 ...

  4. js设计模式笔记小结

    JS 设计模式 面向对象 搭建开发环境 npm / webapck / webpack-dev-server / babel babel-core babel-loader babel-polyfil ...

  5. socket可以写成单例嘛_精读《设计模式 - Singleton 单例模式》

    Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...

  6. [js]设计模式小结对原型的修改

    js设计模式小结 工厂模式/构造函数--减少重复- 创建对象有new- 自动创建obj,this赋值- 无return原型链模式 - 进一步去重类是函数数据类型,每个函数都有prototypecons ...

  7. C#设计模式(1)——单例模式

    原文地址:http://www.cnblogs.com/zhili/p/SingletonPatterm.html 一.引言 最近在设计模式的一些内容,主要的参考书籍是<Head First 设 ...

  8. JS设计模式之Module(模块)模式、Revealing Module(揭示模块)模式

    Module(模块)模式 概念 Module模式最初被定义为一种在传统软件工程中为类提供私有和共有封装的方法. 通过这种方式,能够使一个单独的对象拥有共有/私有方法和变量,从而屏蔽来自全局作用局的特殊 ...

  9. java设计模式之单例模式(七种方法)

    单例模式:个人认为这个是最简单的一种设计模式,而且也是在我们开发中最常用的一个设计模式. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个 ...

最新文章

  1. 从数组中取出m个数相加的结果(组合)
  2. Lyft推出一种新的实时地图匹配算法
  3. “火震”太多打乱NASA计划,火星探测计划将推迟到2022年底
  4. 洛谷P1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)
  5. QT的QXmlDefaultHandler类的使用
  6. 开源netcore前后端分离,前端服务端渲染方案
  7. notepad++ 偶数行_C ++程序查找前N个偶数的立方和
  8. 漫画:程序员每天的6场战斗
  9. LeetCode刷题(48)--Remove Duplicates from Sorted List II
  10. 是什么决定了创业的成败?
  11. 使用Excel公式,获取 全路径中 的 文件名
  12. TextureMerger1.6.6 一:Egret MovieClip的制作和使用
  13. 21天实战人工智能系列:人工智能产品经理最佳实践(3)
  14. 2008服务器文件共享,2008服务器文件共享
  15. galaxy s8 android pc,【三星GALAXYS8评测】DeX套件替代PC办公环境_三星 GALAXY S8_手机评测-中关村在线...
  16. 网页flash加载不出来
  17. 迅捷CAD编辑器中PDF转换CAD的详细步骤
  18. 苹果iphone免越狱使用iTunes获取旧版本APP
  19. Win系统 - 笔记本电脑之耳机插入没声音
  20. python判断空行_python判断空行

热门文章

  1. 2012年6月9日于上海举办华东运维技术大会:演讲主题、演讲嘉宾等信息
  2. mysql 统计历史累计数据,每天的数据需要进行累加
  3. [N32G457] 基于RT-Thread和N32G457的简易便捷式可调电压源
  4. 电子商务网站专题页策划的6个必杀技
  5. gis 联合 融合_三大院齐聚郑州,共同探索BIM+GIS和大数据应用的无限可能
  6. UltraISO制作操作系统U盘启动盘来重装系统
  7. 社交网络中的表情:一个尚待挖掘的巨大金矿
  8. 全国高校人工智能与大数据创新联盟,再次首推云创高校大数据与人工智能实验室建设方案...
  9. 碧桂园的半年报启示:地产周期下如何转型发展?
  10. Ozmosis实现BIOS直接启动Yosemite,基本完美