JavaScript设计模式之单件模式介绍


Posted in Javascript onDecember 28, 2014

单件模式说明

1. 说明:单件模式,就是静态化的访问中已经实例化的对象,这个对象只能通过一个唯一的入口访问,已经实例或待实例化的对象;面向对象语言如Java, .Net C#这样的服务端动态语言里,能保证类的操作有顺的进行,避免并行操作使数据发生混乱的情况;

2. 单件模式的好处:

1>. 减少 new 的操作,以免加快内存频繁操作,占用内存;
2>. 尽量减少大系统的对象的开销;
3>. 就是上面说的,可以保障某些类型的操作有顺序准确的操作,以免并行处理引起的数据异常现象;

当然上面说的好处,都是说服务端语言里的。在javascript这种弱类型的语言,不要纠结那么多,因为脚本都在自己的客户端这边操作的,没有什么操作冲突的问题;相当于整个服务器就你一个人在用,不用担心,你的数据会被其他什么人操作的问题;

实例源码

var Singleton = {

    instance: null,

    MailSender: function() {

        var self = this;

        self.to = '';

        self.title = '';

        self.content = '';

        self.send = function() {

             //send body

        }

    },

    getInstance : function() {

        if (this.instance == null) {

            this.instance = new Singleton.MailSender();

        }

        return this.instance;

    }

}

使用方法:

var mail = Singleton.getInstance();

mail.to = 'toname#mail.com';

mail.title = '单件模式发送';

mail.content = '发送内容';
mail.send();

当像有些全局框架,比如像 DWZ 这样的富UI框架,创建一个 全局 的Singleton 后,Singleton.instance 都有值了,就不必要再创建;

当然如果是写成这样的,会比较明了,跟服务端语言一置:

Singleton.getInstance().to = 'toname#mail.com';

Singleton.getInstance().title = '单件模式发送';

Singleton.getInstance().content = '发送内容';
Singleton.getInstance().send();

其他实说明

单件模式在什么的地方,比较有用呢?比如有一个操作服务器上一个统一的配置文件时,比如像大规模并发操作还需要注意先来后到的情况时,比如交易所的操作过程记录等,都可以用 单件模式 来操作;

另外:单件模式的方式:

1. 上头那种叫懒惰方式

2. 饿棍方式:

var Singleton = {

    instance : new Singleton.MailSender(),

    MailSender : function() {

      var self = this;

      self.to = '';

      self.title = '';

      self.content = '';

      self.send = function() {

          //send body

      }

   },

   getInstance : function() {

        return this.instance;

   }

}

使用方法一样;

使用闭包方式创建单件模式,隐藏 instance 对象

1. 代码:

var Singleton = (function() {

    var instance = null;

    function MailSender() {

       this.to = '';

       this.title = '';

       this.content = '';

    }

    MailSender.prototype.send = function() {

       //send body

    }

    return {

       getInstance : function() {

          if (instance == null) {

             instance = new MailSender();

          }

          return instance;

       }

    }

})();

2. 使用方法:

//一样用法

var mail = Singleton.getInstance();

mail.to = 'toname#mail.com';

mail.title = '闭包式 单件模式发送';

mail.content = '发送内容';
mail.send();

Javascript 相关文章推荐
ie focus bug 解决方法
Sep 03 Javascript
使用JS进行目录上传(相当于批量上传)
Dec 05 Javascript
JavaScript生成GUID的多种算法小结
Aug 18 Javascript
IE6-8中Date不支持toISOString的修复方法
May 04 Javascript
jQuery实现产品对比功能附源码下载
Aug 09 Javascript
javascript表达式和运算符详解
Feb 07 Javascript
浅谈在koa2中实现页面渲染的全局数据
Oct 09 Javascript
Angular2监听页面大小变化的解决方法
Oct 09 Javascript
基于vue-cli配置lib-flexible + rem实现移动端自适应
Dec 26 Javascript
KnockoutJS数组比较算法实例详解
Nov 25 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
Jul 28 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
Sep 02 Javascript
理解javascript回调函数
Dec 28 #Javascript
JavaScript设计模式之建造者模式介绍
Dec 28 #Javascript
如何编写高质量JS代码
Dec 28 #Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
Dec 28 #Javascript
javascript中定义类的方法汇总
Dec 28 #Javascript
js数组的操作指南
Dec 28 #Javascript
JavaScript设计模式之适配器模式介绍
Dec 28 #Javascript
You might like
PHP文件操作实现代码分享
2011/09/01 PHP
PHP 第三节 变量介绍
2012/04/28 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
PHP合并两个或多个数组的方法
2019/01/20 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
2008/03/22 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
javascript中异常处理案例(推荐)
2016/10/03 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
2016/11/25 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
2017/05/04 jQuery
详解vue 实例方法和数据
2017/10/23 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
JS实现容器模块左右拖动效果
2020/01/14 Javascript
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
Python的Bottle框架中获取制定cookie的教程
2015/04/24 Python
在Python中操作字典之setdefault()方法的使用
2015/05/21 Python
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
用Python实现KNN分类算法
2017/12/22 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
python实现串口通信的示例代码
2020/02/10 Python
python 控制台单行刷新,多行刷新实例
2020/02/19 Python
python实现udp传输图片功能
2020/03/20 Python
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
入党申请书自我鉴定
2013/10/12 职场文书
函授本科毕业生自我鉴定
2013/10/16 职场文书
高中生学习的自我评价
2013/12/14 职场文书
法律进社区实施方案
2014/03/21 职场文书
班级活动总结格式
2014/08/30 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
关于保护环境的建议书
2019/06/24 职场文书
JavaScript 反射学习技巧
2021/10/16 Javascript