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 相关文章推荐
JQuery 前台切换网站的样式实现
Jun 22 Javascript
Jquery操作Select 简单方便 一个js插件搞定
Nov 12 Javascript
JS中Iframe之间传值的方法
Mar 11 Javascript
基于JQuery制作可编辑的表格特效
Dec 23 Javascript
JavaScript中用于生成随机数的Math.random()方法
Jun 15 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
Jul 21 Javascript
AngularJS实现按钮提示与点击变色效果
Sep 07 Javascript
JS简单生成随机数(随机密码)的方法
May 11 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
May 31 Javascript
AngularJs导出数据到Excel的示例代码
Aug 11 Javascript
vue+vant实现商品列表批量倒计时功能
Jan 13 Javascript
微信小程序实现锚点跳转
Nov 23 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
?繁体转换的class
2006/10/09 PHP
php 高效率写法 推荐
2010/02/21 PHP
php实现可运算的验证码
2015/11/10 PHP
PHP设置Cookie的HTTPONLY属性方法
2017/02/09 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
微信小程序 本地图片按照屏幕尺寸处理
2017/08/04 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
JavaScript实现左侧菜单效果
2017/12/14 Javascript
vue-socket.io接收不到数据问题的解决方法
2020/05/13 Javascript
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
分享Python字符串关键点
2015/12/13 Python
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
浅谈python 线程池threadpool之实现
2017/11/17 Python
linux中如何使用python3获取ip地址
2019/07/15 Python
python 将字符串中的数字相加求和的实现
2019/07/18 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
python中wx模块的具体使用方法
2020/05/15 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
基础的CSS3弹性盒Flexbox布局使用实例
2016/04/08 HTML / CSS
购买正版游戏和游戏激活码:Green Man Gaming
2019/11/06 全球购物
介绍下Java中==和equals的区别
2013/09/01 面试题
医学检验专业大学生求职信
2013/11/18 职场文书
自主招生自荐信范文
2013/12/04 职场文书
旷课检讨书大全
2014/01/21 职场文书
公证书标准格式
2014/04/10 职场文书
珠宝的促销活动方案
2014/08/31 职场文书
乌镇导游词
2015/02/02 职场文书
高中化学教学反思
2016/02/22 职场文书
机关单位2016年法制宣传日活动总结
2016/04/01 职场文书
Pytorch DataLoader shuffle验证方式
2021/06/02 Python
特别篇动画《总之就是非常可爱 ~制服~》PV公开,2022年夏季播出
2022/04/04 日漫