JavaScript设计模式——单例模式的理解与应用
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设计模式——单例模式的理解与应用相关推荐
- JavaScript设计模式----单例模式
声明:这个系列为阅读<JavaScript设计模式与开发实践> --曾探@著一书的读书笔记 1.单例模式的特点和定义 保证一个类仅有一个实例,并且提供一个访问它的全局访问点. 2.传统面向 ...
- javascript设计模式--单例模式
什么是单例模式 单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象.在JavaScript里,单例作为一个 ...
- JavaScript设计模式 单例模式
单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 先看一下,在Js中使用传统面向对象的单例模式. 面向对象的单例模式,是通过new关键字来实例化我们想要的对象,并将其赋值给in ...
- javascript设计模式-单例模式(singleton pattern)
为什么80%的码农都做不了架构师?>>> 最简单的单例模式 var mySingleton = {property1: "something",proper ...
- JavaScript设计模式——单例模式
单例模式 单例模式顾名思义就是只生成一个实例对象的一种模式.无论调用多少次都只返回相同的实例. 当我们单击登录按钮的时候,页面中会出现一个登录浮窗,而这个登录浮窗是唯一的,无论单击多少次登录按钮,这个 ...
- JavaScript 设计模式核⼼原理与应⽤实践之单例模式——Vuex的数据管理哲学
JavaScript 设计模式核⼼原理与应⽤实践之单例模式--Vuex的数据管理哲学 保证一个类仅有一个实例,并提供一个访问它的全局访问点,这样的模式就叫做单例模式. 单例模式的实现思路 思考这样一个 ...
- JavaScript设计模式理解
之前没有关注过设计模式,一直处于为完成功能而开发的阶段.找同事review代码时,总能轻而易举的发现代码里的不足之处.很多都是自己开发时根本就没想到的. 其实很想知道为什么同事能想到,自己就想不到.可 ...
- JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·抽象工厂——理解“开放封闭”
JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·抽象工厂--理解"开放封闭" 一个不简单的简单工厂引发的命案 在实际的业务中,我们往往面对的复杂度并非数个类 ...
- Javascript设计模式之单例模式
前言:菜鸡也有梦想,而我的梦想就是进一个真正的互联网大厂.以前学习的时候没有系统的整理,从今天开始要保持每周写博客的习惯,希望自己可以有所成长.为了培养编程思维,决定从设计模式开始写起.我是通过读&l ...
最新文章
- 不确定函数参数个数时的处理,va_start和va_end使用详解
- 第二十一讲 卷积公式
- Boost:同步化的测试程序
- springboot防止XSS攻击和sql注入
- Bootstrap 轮番插件Collapse 调用方式
- 由遍历集合所联想到的一些问题
- 点云的无序性_基于深度学习的激光雷达点云物体识别方法总结
- webservice4
- IIS 管理器无法验证此内置帐户是否有访问权
- 副词记忆(II):ly后缀的常用词
- 昆冶金计算机高考录取分数线,昆明冶金高等专科学校2020年录取分数线(附2018-2020年分数线)...
- arduino 嗡鸣器 音乐_arduino笔记一:用arduino实现蜂鸣器播放音乐
- C++ 并发编程(C++11 到 C++17 )
- 快消品B2B平台的仓储物流模式
- 支持一对多脱机克隆,ORICO发布三款便携式硬盘对拷机 - 超能网
- jstack 命令使用经验总结和线程性能诊断脚本
- oracle从入门到跑路
- 解决mysql不能修改密码_如何解决mysql修改密码后不能成功登录_数据库_mysql修改密码_课课家...
- IT传统组织结构及新型扁平化组织
- 智能生鲜自动售货机自动售货系统功能开发介绍方法
热门文章
- spark MLlib平台的协同过滤算法---电影推荐系统
- JS中的prototype、__proto__与constructor(图解)
- nginx优化-nginx事件处理模型优化use epoll;
- ibatis查询CHAR类型的字段
- linux 终端报错 Out of memory: Kill process[PID] [process name] score问题分析
- Oracle数据库基础教程:入门其实很简单
- 使用单独的解决方案(类库)来开发DNN的模块-C#版本(2)
- ES5数组一些常用的方法源码实现
- CSS3:FlexBox的详解
- Python之路,Day9 - 线程、进程、协程和IO多路复用