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 相关文章推荐
使用AngularJS 应用访问 Android 手机的图片库
Mar 24 Javascript
jquery实现简单的表单验证
Nov 17 Javascript
js实现的彩色方块飞舞奇幻效果
Jan 27 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
Jun 02 Javascript
JavaScript简单获取系统当前时间完整示例
Aug 02 Javascript
JavaScript实现多栏目切换效果
Dec 12 Javascript
JS简单获取日期相差天数的方法
Apr 24 Javascript
vue中的event bus非父子组件通信解析
Oct 27 Javascript
Vue.js获取被选择的option的value和text值方法
Aug 24 Javascript
Vue递归实现树形菜单方法实例
Nov 06 Javascript
react写一个select组件的实现代码
Apr 03 Javascript
微信小程序onShareTimeline()实现分享朋友圈
Jan 07 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 fsockopen函数被禁用的解决办法
2013/08/07 PHP
非常好用的Zend Framework分页类
2014/06/25 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
php支付宝在线支付接口开发教程
2016/09/19 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
2019/07/03 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
js截取函数(indexOf,join等)
2010/09/01 Javascript
js控制浏览器全屏示例代码
2014/02/20 Javascript
JavaScript中的console.profile()函数详细介绍
2014/12/29 Javascript
js实现input框文字动态变换显示效果
2015/08/19 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
Javascript动画效果(2)
2016/10/11 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
利用node.js本地搭建HTTP服务器
2017/04/19 Javascript
npm国内镜像 安装失败的几种解决方案
2017/06/04 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
2018/09/03 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
js回调函数仿360开机
2019/12/26 Javascript
通过实例解析js可枚举属性与不可枚举属性
2020/12/02 Javascript
关于sys.stdout和print的区别详解
2019/12/05 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
2020/06/01 Python
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
运动会演讲稿50字
2014/08/25 职场文书
2014单位领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
2014群众路线学习笔记
2014/11/06 职场文书
国庆庆典邀请函
2015/02/02 职场文书
2015年毕业生自荐信范文
2015/03/24 职场文书
Element实现动态表格的示例代码
2021/08/02 Javascript
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers