JavaScript设计模式——对单例模式的一些见解

JavaScript设计模式主要分类:

①创建型设计模式,例如单例模式、工厂模式

②结构型设计模式,例如装饰者模式、适配器模式

③行为型设计模式,例如观察者模式、访问者模式

④技巧型设计模式,例如委托模式、数据访问队形模式

⑤结构型设计模式,例如MVC模式、MVVM模式、MVP模式

本文讨论的是JavaScript中最常见的设计模式:单例模式,适合对JavaScript设计模式没什么太多了解的伙伴。

单例模式出现的背景:

以下为一段用于前后端交互的js

    function getUserInfo() {// 获取用户信息}function setUserInfo(param) {// 设置用户信息}function getCount() {// 登录}function logout() {// 注销}

这样写的弊端:因为function getUserInfo(){}相当于 var getUserInfo = function(){},产生了很多全局变量,例子举的例子算是比较特殊的了,如果是比较大众一点的变量名,就很容易产生冲突。

如何解决?

使用单例模式定义命名空间:

var requestUtil = {getUserInfo: function () {// 获取用户信息},setUserInfo: function (param) {// 设置用户信息},login: function () {// 登录},logout: function () {// 注销}}

函数的调用:当需要获取用户信息时,requestUtil.getUserInfo()即可。

使用单例模式创建小型代码库:

  var X = {Util: {util1: function () {},util2: function () {}},Ajax: {get: function () {},post: function () {}},Others: {function1: function () {},function2: function () {}}}

使用方法:X.Ajax.get()

使用单例模式管理静态变量:

背景:我们都知道,JavaScript没有static这类关键字,所以定义任何变量理论上都是可以改变的(ES6前,因为ES6出现了类似的const,用于定义常量),那么在ES6前,想定义一个静态变量,原意是不想改变的,可实质上它又能被改变,应该如何做到不能被改变?答案如下:

  var Conf = (function () {// 私有变量var conf = {MAX_NUM: 100,MIN_NUM: 1,COUNT: 1000}// 返回取值函数return {get: function (name) {retrun conf[name] ? conf[name] : null}}})()

没有定义赋值函数,因此里边的变量自然就不能被改变。

使用方法: var count = Conf.get('MAX_NUM')

惰性单例:

说明:用于延迟单例对象的创建,即惰性创建。

  var LazySingle = (function () {var _instance = nullfunction Single () {return {publicMethod: function () {return this.publicProperty},publicProperty: '1.0'}}return function () {if (!_instance) {_instance = new Single()}return _instance}})()console.log(LazySingle().publicMethod())

JavaScript设计模式——单例模式的理解与应用相关推荐

  1. JavaScript设计模式----单例模式

    声明:这个系列为阅读<JavaScript设计模式与开发实践> --曾探@著一书的读书笔记 1.单例模式的特点和定义 保证一个类仅有一个实例,并且提供一个访问它的全局访问点. 2.传统面向 ...

  2. javascript设计模式--单例模式

    什么是单例模式 单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象.在JavaScript里,单例作为一个 ...

  3. JavaScript设计模式 单例模式

    单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 先看一下,在Js中使用传统面向对象的单例模式. 面向对象的单例模式,是通过new关键字来实例化我们想要的对象,并将其赋值给in ...

  4. javascript设计模式-单例模式(singleton pattern)

    为什么80%的码农都做不了架构师?>>>    最简单的单例模式 var mySingleton = {property1: "something",proper ...

  5. JavaScript设计模式——单例模式

    单例模式 单例模式顾名思义就是只生成一个实例对象的一种模式.无论调用多少次都只返回相同的实例. 当我们单击登录按钮的时候,页面中会出现一个登录浮窗,而这个登录浮窗是唯一的,无论单击多少次登录按钮,这个 ...

  6. JavaScript 设计模式核⼼原理与应⽤实践之单例模式——Vuex的数据管理哲学

    JavaScript 设计模式核⼼原理与应⽤实践之单例模式--Vuex的数据管理哲学 保证一个类仅有一个实例,并提供一个访问它的全局访问点,这样的模式就叫做单例模式. 单例模式的实现思路 思考这样一个 ...

  7. JavaScript设计模式理解

    之前没有关注过设计模式,一直处于为完成功能而开发的阶段.找同事review代码时,总能轻而易举的发现代码里的不足之处.很多都是自己开发时根本就没想到的. 其实很想知道为什么同事能想到,自己就想不到.可 ...

  8. JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·抽象工厂——理解“开放封闭”

    JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·抽象工厂--理解"开放封闭" 一个不简单的简单工厂引发的命案 在实际的业务中,我们往往面对的复杂度并非数个类 ...

  9. Javascript设计模式之单例模式

    前言:菜鸡也有梦想,而我的梦想就是进一个真正的互联网大厂.以前学习的时候没有系统的整理,从今天开始要保持每周写博客的习惯,希望自己可以有所成长.为了培养编程思维,决定从设计模式开始写起.我是通过读&l ...

最新文章

  1. 不确定函数参数个数时的处理,va_start和va_end使用详解
  2. 第二十一讲 卷积公式
  3. Boost:同步化的测试程序
  4. springboot防止XSS攻击和sql注入
  5. Bootstrap 轮番插件Collapse 调用方式
  6. 由遍历集合所联想到的一些问题
  7. 点云的无序性_基于深度学习的激光雷达点云物体识别方法总结
  8. webservice4
  9. IIS 管理器无法验证此内置帐户是否有访问权
  10. 副词记忆(II):ly后缀的常用词
  11. 昆冶金计算机高考录取分数线,昆明冶金高等专科学校2020年录取分数线(附2018-2020年分数线)...
  12. arduino 嗡鸣器 音乐_arduino笔记一:用arduino实现蜂鸣器播放音乐
  13. C++ 并发编程(C++11 到 C++17 )
  14. 快消品B2B平台的仓储物流模式
  15. 支持一对多脱机克隆,ORICO发布三款便携式硬盘对拷机 - 超能网
  16. jstack 命令使用经验总结和线程性能诊断脚本
  17. oracle从入门到跑路
  18. 解决mysql不能修改密码_如何解决mysql修改密码后不能成功登录_数据库_mysql修改密码_课课家...
  19. IT传统组织结构及新型扁平化组织
  20. 智能生鲜自动售货机自动售货系统功能开发介绍方法

热门文章

  1. spark MLlib平台的协同过滤算法---电影推荐系统
  2. JS中的prototype、__proto__与constructor(图解)
  3. nginx优化-nginx事件处理模型优化use epoll;
  4. ibatis查询CHAR类型的字段
  5. linux 终端报错 Out of memory: Kill process[PID] [process name] score问题分析
  6. Oracle数据库基础教程:入门其实很简单
  7. 使用单独的解决方案(类库)来开发DNN的模块-C#版本(2)
  8. ES5数组一些常用的方法源码实现
  9. CSS3:FlexBox的详解
  10. Python之路,Day9 - 线程、进程、协程和IO多路复用