zoukankan      html  css  js  c++  java
  • [设计模式] javascript 之 单件模式

    单件模式说明

    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();
  • 相关阅读:
    FontAwesome动态旋转图标类(fa-spin&fa-pulse)
    心得体悟帖---200401(录课异常状态可以试讲,且一定试讲,然后等到好状态一举拿下)
    心得体悟帖---200401(别身在福中不知福,现在是多好的时机,做自己开心的事情)
    心得体悟帖---200401(你做任何事情,抉择和责任都在自己,而不是在别人)
    laravel疑难问题---4、phpstorm中如何配置phpunit(单元测试)
    phpstorm常用配置和快捷键
    phpstorm常用操作---5、phpstorm配置命令行环境
    phpstorm常用操作---4、phpstorm配置phpunit环境
    phpstorm常用操作---3、phpstorm修改默认快捷键
    phpstorm常用操作---2、phpstorm特别常用快捷键
  • 原文地址:https://www.cnblogs.com/editor/p/4156131.html
Copyright © 2011-2022 走看看