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 相关文章推荐
JavaScript 编程引入命名空间的方法与代码
Aug 13 Javascript
JQuery 风格的HTML文本转义
Jul 01 Javascript
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
Aug 05 Javascript
什么是cookie?js手动创建和存储cookie
May 27 Javascript
jQuery新的事件绑定机制on()示例应用
Jul 18 Javascript
js微信分享实现代码
Oct 11 Javascript
ES6 javascript中Class类继承用法实例详解
Oct 30 Javascript
vue router 配置路由的方法
Jul 26 Javascript
JavaScript错误处理操作实例详解
Jan 04 Javascript
TypeScript中的方法重载详解
Apr 12 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
Jun 25 Javascript
微信小程序使用车牌号输入法的示例代码
Aug 20 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下拉选项的批量操作的实现代码
2013/10/14 PHP
Yii框架中memcache用法实例
2014/12/03 PHP
Laravel 5.3 学习笔记之 配置
2016/08/28 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
2016/10/18 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
javascript demo 基本技巧
2009/12/18 Javascript
javascript new后的constructor属性
2010/08/05 Javascript
js 获取经纬度的实现方法
2016/06/20 Javascript
codeMirror插件使用讲解
2017/01/16 Javascript
React组件生命周期详解
2017/07/03 Javascript
微信小程序实现弹出层效果
2020/05/26 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
Python实现多行注释的另类方法
2014/08/22 Python
Python单元测试框架unittest使用方法讲解
2015/04/13 Python
Python简单进程锁代码实例
2015/04/27 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
Python的CGIHTTPServer交互实现详解
2018/02/08 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
使用Py2Exe for Python3创建自己的exe程序示例
2018/10/31 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
python retrying模块的使用方法详解
2019/09/25 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
CSS3实现同时执行倾斜和旋转的动画效果
2016/10/27 HTML / CSS
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
民主生活会发言材料
2014/10/20 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
土建施工员岗位职责
2015/04/11 职场文书
保安辞职申请书应该怎么写?
2019/07/15 职场文书
2019年学校消防安全责任书(2篇)
2019/10/09 职场文书