一、定义

设计模式的定义是:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决 方案,通俗一点说,设计模式是在某种场合下对某个问题的一种解决方案。如果再通俗一点说,设计模式就是给面向对象软件开发中的一些好的设计取个名字。也就是说设计模式并不难,而只是一些目前公认的解决某些问题的最佳实现而已。

1. 单例模式

单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点。例如:线程池,全局缓存,浏览器window对象等,这些都只需要一个对象实例就足够了。

1.1 实现单例模式

要实现单例模式也并不复杂,只要用一个变量来标识是否已经给某个类创建过实例,如果是,则在下一次获取该类的实例的时候,直接返回已经缓存好的实例, 否则创建并缓存这个实例。

1.单例模式实现一

// 单例模式实现一function SingleTon(name) {this.name = name;this.instance = null;}SingleTon.prototype.getName = function() {return this.name;}SingleTon.getInstance = function(name) {if (this.instance) {return this.instance;}return new SingleTon(name);}
复制代码
  1. 单例模式实现二, 利用闭包
    // 单例模式实现二, 利用闭包function SingleTon2(name) {this.name = name;}SingleTon2.getInstance = (function(){let instance = null;return function(name) {if (!instance) {instance = new SingleTon2(name);}return instance;}})();
复制代码
  1. 实现三, 利用类
    // 实现三 类class SingleTon3 {constructor(props) {const { name, ...other } = props;this.name = name;this.instance = null; // 标识是否已经创建过实例}setName = () => {return this.name;}static getInstance = (name) => {this.instance = this.instance ? this.instance : new SingleTon3(name); return this.instance;}}const t1 = SingleTon3.getInstance('timo1');const t2 = SingleTon3.getInstance('timo2');console.log('t1 => ',t1); // timo1console.log('t2 => ',t2); // timo1console.log('t1 === t2 => ',t1 === t2); // true
复制代码

注意: 类(class)通过static关键字定义静态方法。不能在类的实例上调用静态方法,而应该通过类本身调用。这些通常是实用程序方法,例如创建或克隆对象的功能

4.衍生, 使用闭包来封装私有变量

    // 使用闭包来封装私有变量const user = (function() {let name = 'timo';let age = 22;return {getUserInfo: function() {return name + ' '+ age;}};})();
复制代码

特别注意:let 和 const 声明并不会绑定到全局的window对象上!!!而使用var声明会自动绑定到window

总结:

单例模式是一种简单但非常实用的模式,特别是惰性单例技术,在合适的时候才创建对象,并且只创建唯一的一个。

转载于:https://juejin.im/post/5cfa1f2be51d45773d4685da

JS 设计模式之初识(一)-单例模式相关推荐

  1. JS设计模式学习实例之单例模式

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head><ti ...

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

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

  3. js设计模式笔记小结

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

  4. 一天一个设计模式(3)——单例模式

    单例模式 单例模式是最简单也是最常用的一种设计模式了,通过单例模式,可以保证系统运行过程中,该类不会被重复实例化.即:一个类只有一个实例. 实现要求 单例类只能有一个实例. 单例类只能自己创建自己的实 ...

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

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

  6. Java并发程序设计(八)设计模式与并发之单例模式

    设计模式与并发之单例模式 简单的单例实现: public class Singleton {private Singleton(){System.out.println("Creating ...

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

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

  8. 设计模式(一)单例模式:5-单元素枚举类模式

    思想: 单元素的枚举类型已经成为实现 Singleton 的最佳方法. -- <Effective Java> 第三条:用私有构造器或者枚举类型强化 Singleton 属性 public ...

  9. js设计模式——3.观察者模式

    js设计模式--观察者模式 /*js设计模式--.观察者模式*/// 主题,保存状态,状态变化之后触发所有观察者对象 class Subject {constructor() {this.state ...

最新文章

  1. Loonframwork到SWT的移植测试(JAVA GAME TEST SOURCE)
  2. Java读写文件,中文乱码解决
  3. Reveal 的初步用法
  4. hdoop(2)——hdfs一些常用的配置文件
  5. mysql的联表查询和去重复数据
  6. js/css 检测移动设备方向的变化 判断横竖屏幕
  7. 自动门程序c语言,自动门控制程序共享
  8. SqlServer2008 数据库同步的两种方式(Sql JOB)
  9. 如何让一个用户拥有root权限
  10. 怎样把RStudio字体调大
  11. Android基础:ViewPage2
  12. 从tushare pro获取上证指数内成分股权重排序分出等级
  13. linux中使用rpm命令详解
  14. PCB后续以及泪滴、敷铜和标识
  15. 006网易-表达式求值
  16. python古诗代码案例_用python实现古诗词横板竖版显示 【二维列表的使用】
  17. 利用策略路由traffic-policy 实现路由的控制
  18. sh文件加密解密gzexe(Cannot decompress $0)
  19. 设计模式---状态模式(State Pattern)
  20. 大学物理实验报告2——数字示波器的使用

热门文章

  1. HTML框架IFrame结合JS在主页面和子页面间传值
  2. 一个有关ajax去获取天气预报然后用echarts展现出来的小demo
  3. 浏览器同源策略及Cookie的作用域
  4. OpenGL Vertex Array
  5. 【入门经典】在母版页中使用CSS
  6. css字体设置奇怪问题
  7. Effective C# 原则16:垃圾最小化(译)
  8. TP5 实现链接分享/帮助,限制每个用户每天一次帮忙
  9. PowerShell-1.入门及其常用
  10. 【ijkplayer】编译 Android 版本的 ijkplayer ⑤ ( 执行 init-android-libyuv.sh | 执行 init-android-soundtouch.sh )