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 相关文章推荐
js隐藏与显示回到顶部按钮及window.onscroll事件应用
Jan 25 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
Jun 19 Javascript
JS实现的Select三级下拉菜单代码
Aug 20 Javascript
全系IE支持Bootstrap的解决方法
Oct 19 Javascript
Javascript的表单验证长度
Mar 16 Javascript
Angular 输入框实现自定义验证功能
Feb 19 Javascript
浅谈js中的this问题
Aug 31 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
Jun 04 Javascript
React项目动态设置title标题的方法示例
Sep 26 Javascript
vue 配置多页面应用的示例代码
Oct 22 Javascript
el-table树形表格表单验证(列表生成序号)
May 31 Javascript
node.js 如何监视文件变化
Sep 01 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
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
新浪SAE搭建PHP项目教程
2015/01/28 PHP
php文件缓存方法总结
2016/03/16 PHP
JavaScript 以对象为索引的关联数组
2010/05/19 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
vue中如何添加百度统计代码
2020/12/19 Vue.js
[07:37]DOTA2-DPC中国联赛2月2日Recap集锦
2021/03/11 DOTA
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
分析在Python中何种情况下需要使用断言
2015/04/01 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
基于Python的关键字监控及告警
2017/07/06 Python
python十进制和二进制的转换方法(含浮点数)
2018/07/07 Python
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
详解多线程Django程序耗尽数据库连接的问题
2018/10/08 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
Python如何生成xml文件
2020/06/04 Python
Python confluent kafka客户端配置kerberos认证流程详解
2020/10/12 Python
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
食堂个人先进事迹
2014/01/22 职场文书
优秀教师的感人事迹
2014/02/04 职场文书
爱护公共设施倡议书
2014/08/29 职场文书
女生抽烟检讨书
2014/10/05 职场文书
股份转让协议书范本
2015/01/27 职场文书
五年级作文之成长
2019/09/16 职场文书
您对思维方式了解多少?
2019/12/09 职场文书