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 相关文章推荐
深入理解JavaScript系列(12) 变量对象(Variable Object)
Jan 16 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
Sep 25 Javascript
appendChild() 或 insertBefore()使用与区别介绍
Oct 11 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
Nov 01 Javascript
Vue实现双向绑定的方法
Dec 22 Javascript
webpack配置文件和常用配置项介绍
Apr 28 Javascript
vue自定义一个v-model的实现代码
Jun 21 Javascript
详解如何在Vue里建立长按指令
Aug 20 Javascript
vue使用Google地图的实现示例代码
Dec 19 Javascript
页面内锚点定位及跳转方法总结(推荐)
Apr 24 Javascript
vue.js实现简单的计算器功能
Feb 22 Javascript
原生js实现日历效果
Mar 02 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里的中文变量说明
2011/07/23 PHP
php把session写入数据库示例
2014/02/26 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
2017/07/19 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
扩展String功能方法
2006/09/22 Javascript
JavaScript 对象模型 执行模型
2009/12/06 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
EsLint入门学习教程
2017/02/17 Javascript
JS实现简单拖拽效果
2017/06/21 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
react 移动端实现列表左滑删除的示例代码
2019/07/04 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
2019/08/27 jQuery
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
python脚本爬取字体文件的实现方法
2017/04/29 Python
Python基于opencv的图像压缩算法实例分析
2018/05/03 Python
python 多线程串行和并行的实例
2019/02/22 Python
python实现感知机线性分类模型示例代码
2019/06/02 Python
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
Python实现手绘图效果实例分享
2020/07/22 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
匡威荷兰官方网站:Converse荷兰
2018/10/24 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
外贸业务员的岗位职责
2013/11/23 职场文书
责任胜于能力演讲稿
2014/05/20 职场文书
物流专业自荐信
2014/05/23 职场文书
机电专业求职信
2014/06/14 职场文书
音乐学专业求职信
2014/07/22 职场文书
交通事故和解协议书
2015/01/27 职场文书
网上祭英烈活动总结
2015/02/04 职场文书
Python 中 Shutil 模块详情
2021/11/11 Python
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技
MySQL主从切换的超详细步骤
2022/06/28 MySQL