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 相关文章推荐
JSON JQUERY模板实现说明
Jul 03 Javascript
javascript中的startWith和endWith的几种实现方法
May 07 Javascript
javascript获取dom的下一个节点方法
Sep 05 Javascript
javascript控制层显示或隐藏的方法
Jul 22 Javascript
javascript之Boolean类型对象
Jun 07 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
Nov 25 Javascript
Angular 4.x中表单Reactive Forms详解
Apr 25 Javascript
Vue.js上下滚动加载组件的实例代码
Jul 17 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
Aug 01 Javascript
Vue动态获取width的方法
Aug 22 Javascript
JS如何实现动态添加的元素绑定事件
Nov 12 Javascript
四十九个javascript小知识实用技巧
Nov 20 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中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
php cc攻击代码与防范方法
2012/10/18 PHP
PHP stripos()函数及注意事项的分析
2013/06/08 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
PC端微信扫码支付成功之后自动跳转php版代码
2017/07/07 PHP
laravel 数据验证规则详解
2019/10/23 PHP
PHP实现倒计时功能
2020/11/16 PHP
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
使用jquery操作session方法分享
2015/01/22 Javascript
使用javaScript动态加载Js文件和Css文件
2015/10/24 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
详解Node.js模块间共享数据库连接的方法
2016/05/24 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
[34:41]夜魇凡尔赛茶话会 第二期02:你画我猜
2021/03/11 DOTA
python中实现指定时间调用函数示例代码
2017/09/08 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
完美解决python中ndarray 默认用科学计数法显示的问题
2018/07/14 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
python采集微信公众号文章
2018/12/20 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
2020/06/14 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
马来西亚最热门的在线时尚商店:FashionValet
2018/11/11 全球购物
幼儿园实习生辞职信
2014/01/20 职场文书
办公室主任个人总结
2015/02/28 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
农村党员干部承诺书
2015/05/04 职场文书
JavaScript 反射学习技巧
2021/10/16 Javascript