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 BASE64编码 window.atob(), window.btoa()
Mar 09 Javascript
Jquery AutoComplete自动完成 的使用方法实例
Mar 19 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
May 17 Javascript
基于jquery的web页面日期格式化插件
Nov 15 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
Mar 19 Javascript
纯JavaScript实现的分页插件实例
Jul 14 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
May 31 Javascript
使用JavaScriptCore实现OC和JS交互详解
Mar 28 Javascript
使用 vue.js 构建大型单页应用
Feb 10 Javascript
微信小程序上传图片功能(附后端代码)
Jun 19 Javascript
Angular2中监听数据更新的方法
Aug 31 Javascript
Vue resource三种请求格式和万能测试地址
Sep 26 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编程中字符串处理的5个技巧小结
2007/11/13 PHP
深入php多态的实现详解
2013/06/09 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
javascript一点特殊用法
2008/05/28 Javascript
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
2013/04/02 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
javascript页面上使用动态时间具体实现
2014/03/18 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
node.js 抓取代理ip实例代码
2017/04/30 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
微信小程序模板(template)使用详解
2018/01/31 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
浅谈vue权限管理实现及流程
2020/04/23 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
Python常用内置函数总结
2015/02/08 Python
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
django跳转页面传参的实现
2020/09/17 Python
建筑专业毕业生推荐信
2013/11/21 职场文书
室内设计专业学生的自我评价分享
2013/11/27 职场文书
地理科学专业自荐信
2014/09/01 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
少先队辅导员事迹材料
2014/12/24 职场文书
失恋33天观后感
2015/06/11 职场文书
python 爬取吉首大学网站成绩单
2021/06/02 Python
gojs实现蚂蚁线动画效果
2022/02/18 Javascript