js设计模式-单例模式
JavaScript中的单例模式是最常用的、最基本的设计模式,它提供了一种命名空间,减少全局变量泛滥的代码管理机制;
1、最常见的单例模式:
- //一般用function定义的类,我才会采用首字母大写的方法来约定这个变量为类
- //而对于这种伪类,我通常习惯于使用驼峰式命名法
- var singleton = {
- attr1: '',
- attr2: '',
- method1: function() {},
- method2: function() {}
- };
这是JavaScript开发中最常用的代码组织方式,这种方式在JavaScript执行的时候,就已经创建了实例对象。这样创建的实例对象,所有的属性、方法都是公开的,有一定的风险;一般使用这样的单例模式,我们可以采用下划线_来命名私有变量,来约定为私有变量。但是很不靠谱!
2、闭包方法的单例模式:
- var singleton = (function() {
- var _a, _b; //私有变量
- var that = {}; //new某个类
- //公开接口
- that.getA = function() {
- return _a;
- };
- that.setA = function(a) {
- _a = a;
- };
- that.getB = function() {
- return _b;
- };
- that.setB = function(b) {
- _b = b;
- };
- return that; //返回单例
- })();
以上这种方法,实现了单例的私有变量对用户透明,用户所能知道的只有公开的接口,不能随意改变私有变量,但是这种方法还是在执行脚步的时候就产生了一个单例,用户有可能根本就不使用这段代码,这样就会造成内存浪费,更好的做法是将类的实例化推迟到需要的时候再实例化;
3、lazy方式的单例模式:
- var singleton = (function() {
- var _a, _b; //私有变量
- var Class = function() {
- //code
- };
- var that = {};
- //公开接口
- that.getA = function() {
- return _a;
- };
- that.setA = function(a) {
- _a = a;
- };
- that.getB = function() {
- return _b;
- };
- that.setB = function(b) {
- _b = b;
- };
- var _instance = null;
- var getInstance = function() {
- if(!_instance) {
- _instance = new Class();
- }
- return _instance;
- };
- Class.prototype = that;
- return {
- getInstance: getInstance
- };
- })();
那么这种方法就可以在确实需要这段代码的时候,才实例化,实现懒惰性的单例模式!
js设计模式-单例模式的更多相关文章
- JS设计模式——单例模式剖析
转载于原文地址:https://blog.csdn.net/q1056843325/article/details/52933426 举一个通俗的例子,在页面中点击登录按钮,弹出了一个登录浮窗,这个登 ...
- [js]js设计模式-单例模式
单例模式 不同模块之间需要同时开发, // 单例模式: 把描述同一个事物的属性和方法放在同一个内存空间下. // 优点: 分组,防止冲突 // p1 p2也叫做命名空间(模块开发) var p1 = ...
- js 设计模式——单例模式
单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池.全局缓存.浏览器中的 window 对象等. JavaScript ...
- [转]JS设计模式-单例模式(二)
单例模式是指保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式是一种常用的模式,有一些对象往往只需要一个,比如线程池.全局缓存.浏览器中的window对象等.在javaScript开发中 ...
- ES6教程-字符串,函数的参数,了解函数的arguments对象,js面向对象,设计模式-单例模式,解构赋值
前言 主要讲解了ES6对字符串的拓展,包括includes,startsWith和endsWith,另外增加了字符串模板. Start includes()是否包含 startsWith()以什么开头 ...
- JS设计模式(一)
刚入职时,看过一段时间的设计模式,似懂非懂.不知不觉过去七个月了,对JS的理解更深刻了,数据结构与算法的基础也基本上算是过了一遍了,接下来要把设计模式搞定,然后不再深层次研究JS了,而是学习前端自动化 ...
- JavaScript设计模式-单例模式、模块模式(转载 学习中。。。。)
(转载地址:http://technicolor.iteye.com/blog/1409656) 之前在<JavaScript小特性-面向对象>里面介绍过JavaScript面向对象的特性 ...
- js设计模式总结1
js设计模式有很多种,知道不代表会用,更不代表理解,为了更好的理解每个设计模式,对每个设计模式进行总结,以后只要看到总结,就能知道该设计模式的作用,以及模式存在的优缺点,使用范围. 本文主要参考张容铭 ...
- JS实现单例模式的多种方案
JS实现单例模式的多种方案 今天在复习设计模式中的-创建型模式,发现JS实现单例模式的方案有很多种,稍加总结了一下,列出了如下的6种方式与大家分享 大体上将内容分为了ES5(Function)与ES6 ...
随机推荐
- Codeforces Round #366 (Div. 2) C Thor(模拟+2种stl)
Thor 题意: 第一行n和q,n表示某手机有n个app,q表示下面有q个操作. 操作类型1:app x增加一条未读信息. 操作类型2:一次把app x的未读信息全部读完. 操作类型3:按照操作类型1 ...
- 【转】C++ 单例模式
http://blog.csdn.net/hackbuteer1/article/details/7460019 单例的一般实现比较简单,下面是代码和UML图.由于构造函数是私有的,因此无法通过构造函 ...
- Build常见错误
1.ant 解决com.sun.tools.javac.Main is not on the classpath的问题 在ant打包时报错: 解决com.sun.tools.javac.Main is ...
- git添加标签(转载)
From:http://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE 打标签 同大多数 VCS 一 ...
- [Flex] PopUpButton系列 —— 设置弹出菜单与主按钮之间的间隔
<?xml version="1.0" encoding="utf-8"?><!--设置弹出菜单与主按钮之间的间隔 PopUpButtonPo ...
- java中json包的使用以及字符串,map,list,自定义对象之间的相互转换
做一个map和字符串的转换,需要导入这些jar包,这是最基本的一些jar包. 经过多方尝试得出结论入下: 首先导入基本包:json-lib-2.2.3-jdk15.jar 如果没有这个jar包,程序是 ...
- angularJs自定义指令时的绑定
<!DOCTYPE html> <html ng-app="app"> <head> <meta charset="utf-8& ...
- Winista.Text.HtmlParser; 获取html
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- DP编辑距离
俄罗斯科学家Vladimir Levenshtein在1965年提出了编辑距离概念. 编辑距离,又称Levenshtein距离,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数.许可的三种编 ...
- pytest学习笔记(二)
继续文档的第二章 (一)pytest中可以在命令行中静态/动态添加option,这里没什么好讲的,略过... 这里面主要讲下如何试用skip/xfail,还有incremental(包含一些列的测试步 ...