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 阻止子元素响应父元素的onmouseout事件具体实现
Dec 23 Javascript
javaScript使用EL表达式的几种方式
May 27 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
Sep 15 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
Jun 07 jQuery
jQuery 实现双击编辑表格功能
Jun 19 jQuery
详解Eslint 配置及规则说明
Sep 10 Javascript
解决vue单页面应用中动态修改title问题
Jun 09 Javascript
JavaScript 截取字符串代码实例
Sep 05 Javascript
在Express中提供静态文件的实现方法
Oct 17 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
Oct 24 Javascript
iSlider手机端图片滑动切换插件使用详解
Dec 24 Javascript
详解vue-flickity的fullScreen功能实现
Apr 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 动态多文件上传
2009/01/18 PHP
深入file_get_contents函数抓取内容失败的原因分析
2013/06/25 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
Gambit vs CL BO3 第二场 2.13
2021/03/10 DOTA
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
表单类各种类型(文本框)失去焦点效果jquery代码
2013/04/26 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
jQuery is()函数用法3例
2014/05/06 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
JavaScript对象参数的引用传递
2016/01/14 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
2016/06/07 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
js模块加载方式浅析
2017/08/12 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
python抓取网页中的图片示例
2014/02/28 Python
Python 忽略warning的输出方法
2018/10/18 Python
使用python实现mqtt的发布和订阅
2019/05/05 Python
感知器基础原理及python实现过程详解
2019/09/30 Python
python中@property和property函数常见使用方法示例
2019/10/21 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
德国拖鞋网站:German Slippers
2019/11/08 全球购物
夜大毕业生自我评价分享
2013/11/10 职场文书
欢迎领导标语
2014/06/27 职场文书
幼儿园教师节演讲稿
2014/09/03 职场文书
地方白酒代理协议书
2014/10/25 职场文书
遗愿清单观后感
2015/06/09 职场文书
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs