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 jquery做的图片连续滚动代码
Jan 06 Javascript
向大师们学习Javascript(视频与PPT)
Dec 27 Javascript
THREE.JS入门教程(4)创建粒子系统
Jan 24 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
Mar 21 Javascript
GRID拖拽行的实例代码
Jul 18 Javascript
js图片延迟技术一般的思路与示例
Mar 20 Javascript
巧用数组制作图片切换js代码
Nov 29 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
Apr 04 jQuery
clipboard.js在移动端复制失败的解决方法
Jun 13 Javascript
bootstrap中的导航条实例代码详解
May 20 Javascript
Weex开发之地图篇的具体使用
Oct 16 Javascript
使用js和canvas实现时钟效果
Sep 08 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
用 PHP5 轻松解析 XML
2006/12/04 PHP
php实现的MySQL通用查询程序
2007/03/11 PHP
PHP关联数组的10个操作技巧
2013/01/21 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
2016/07/12 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
AngularJS中的promise用法分析
2017/05/19 Javascript
three.js加载obj模型的实例代码
2017/11/10 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
2018/02/07 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
2018/10/22 Javascript
详解关于element级联选择器数据回显问题
2019/02/20 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
解决layui的table插件无法多层级获取json数据的问题
2019/09/19 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
Python httplib,smtplib使用方法
2008/09/06 Python
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
Python安装第三方库的3种方法
2015/06/21 Python
python机器学习理论与实战(五)支持向量机
2018/01/19 Python
使用python进行波形及频谱绘制的方法
2019/06/17 Python
Python基于smtplib协议实现发送邮件
2020/06/03 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
学校门卫工作职责
2013/12/07 职场文书
绿里奇迹观后感
2015/06/15 职场文书