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 相关文章推荐
更优雅的事件触发兼容
Oct 24 Javascript
使用jquery自定义鼠标样式满足个性需求
Nov 05 Javascript
js在IE与firefox的差异集锦
Nov 11 Javascript
JavaScript实现同步于本地时间的动态时间显示方法
Feb 02 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
Aug 28 Javascript
学习使用jQuery表单验证插件和日历插件
Feb 13 Javascript
webpack配置sass模块的加载的方法
Jul 30 Javascript
js 两数组去除重复数值的实例
Dec 06 Javascript
JavaScript中arguments和this对象用法分析
Aug 08 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
Aug 09 Javascript
vue3.0+vue-router+element-plus初实践
Dec 02 Vue.js
原型和原型链 prototype和proto的区别详情
Nov 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
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
2014/05/10 PHP
php简单实现MVC
2015/02/05 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
解析Node.js异常处理中domain模块的使用方法
2016/02/16 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
jQuery快速实现商品数量加减的方法
2017/02/06 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
react.js CMS 删除功能的实现方法
2017/04/17 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
angular4自定义组件详解
2017/09/28 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
JS FormData对象使用方法实例详解
2020/02/12 Javascript
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
vue 实现一个简单的全局调用弹窗案例
2020/09/10 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
在Python的Django框架中生成CSV文件的方法
2015/07/22 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
2019/12/02 Python
如何在sublime编辑器中安装python
2020/05/20 Python
python pymysql库的常用操作
2020/10/16 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
简历自荐信范文
2015/03/09 职场文书
义诊活动通知
2015/04/24 职场文书
2015年勤工助学工作总结
2015/04/29 职场文书
公安纪律作风整顿心得体会
2016/01/23 职场文书
MySQL8.0.18配置多主一从
2021/06/21 MySQL
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL