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 相关文章推荐
jquery 1.4.2发布!主要是性能与API
Feb 25 Javascript
JavaScript中两种链式调用实现代码
Jan 12 Javascript
推荐8款jQuery轻量级树形Tree插件
Nov 12 Javascript
Javascript中的方法链(Method Chaining)介绍
Mar 15 Javascript
不用一句js代码初始化组件
Jan 27 Javascript
AngularJS使用ng-options指令实现下拉框
Aug 23 Javascript
最原始的jQuery注册验证方式
Oct 11 Javascript
Angular 封装并发布组件的方法示例
Apr 19 Javascript
微信小程序实现倒计时调用相机自动拍照功能
Jun 10 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
Oct 14 Javascript
三步搞定:Vue.js调用Android原生操作
Sep 07 Javascript
Javascript实现关闭广告效果
Jan 29 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 日,周,月点击排行统计
2012/01/11 PHP
深入PHP中慎用双等于(==)的详解
2013/06/06 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
php中有关合并某一字段键值相同的数组合并的改进
2015/03/10 PHP
PHP生成腾讯云COS接口需要的请求签名
2018/05/20 PHP
jQuery 阴影插件代码分享
2012/01/09 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
使用jQueryMobile实现滑动翻页效果的方法
2015/02/04 Javascript
基于JSON数据格式详解
2017/08/31 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
Vue的v-model的几种修饰符.lazy,.number和.trim的用法说明
2020/08/05 Javascript
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
Python脚本实现下载合并SAE日志
2015/02/10 Python
Python Socket传输文件示例
2017/01/16 Python
利用Python实现网络测试的脚本分享
2017/05/26 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
numpy中的delete删除数组整行和整列的实例
2018/05/09 Python
Python实现的txt文件去重功能示例
2018/07/07 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
python字典的常用方法总结
2019/07/31 Python
如何用Django处理gzip数据流
2021/01/29 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
纯CSS3实现的阴影效果
2014/12/24 HTML / CSS
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
介绍一下OSI七层模型
2012/07/03 面试题
幼儿园实习自我鉴定
2013/12/15 职场文书
外语系大学生自荐信范文
2014/03/01 职场文书
培训班开班仪式主持词
2014/03/28 职场文书
会计求职自荐信
2014/06/20 职场文书
优秀团员事迹材料1500字
2014/08/31 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
2014年电教工作总结
2014/12/19 职场文书
详解Python自动化之文件自动化处理
2021/06/21 Python
小程序与后端Java接口交互实现HelloWorld入门
2021/07/09 Java/Android
DQL数据查询语句使用示例
2022/12/24 MySQL