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 弹出层组件(升级版)
May 12 Javascript
16个最流行的JavaScript框架[推荐]
May 29 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
Oct 24 Javascript
HTML5之lang属性与dir属性的详解
Jun 19 Javascript
JavaScript中this详解
Sep 01 Javascript
jQuery Real Person验证码插件防止表单自动提交
Nov 06 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
Aug 04 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
Aug 06 Javascript
vue 使用ref 让父组件调用子组件的方法
Feb 08 Javascript
vuex操作state对象的实例代码
Apr 25 Javascript
超详细的5个Shell脚本实例分享(值得收藏)
Aug 15 Javascript
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 Vue.js
理解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系统流量分析的程序
2006/10/09 PHP
优化使用mysql存储session的php代码
2008/01/10 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
2016/12/23 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
非常好的js代码
2006/06/27 Javascript
Add a Table to a Word Document
2007/06/15 Javascript
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
js实现仿阿里巴巴城市选择框效果实例
2015/06/24 Javascript
javascript数组排序汇总
2015/07/07 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
JS实现简单日历特效
2020/01/03 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
Python文本相似性计算之编辑距离详解
2016/11/28 Python
Python使用PyCrypto实现AES加密功能示例
2017/05/22 Python
python 获取list特定元素下标的实例讲解
2018/04/09 Python
浅谈关于Python3中venv虚拟环境
2018/08/01 Python
24式加速你的Python(小结)
2019/06/13 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
python实现简单坦克大战
2020/03/27 Python
蒂娜商店:Tiina the Store
2019/12/07 全球购物
天网面试题
2013/04/07 面试题
代理协议书范本
2014/04/22 职场文书
2014年化验员工作总结
2014/11/18 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
论语读书笔记
2015/06/26 职场文书
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python