• JavaScript设计模式,单例模式!


    单例设计模式:保证一个类仅有一个实例,并且提供一个访问它的全局访问点。有些对象只需要一个,这时可用单例模式。

    传统的单例模式

    • 和new 创建对象的调用不一样
    • 调用者要调用xxx.getInstance才能获得该单例
    function Singleton(name) {
        this.name = name;
    }
    Singleton.getInstance = function (name) {
        if(this.instace){
            return this.instace;
        }else {
            this.instace = new Singleton(name);
            return this.instace;
        }
    };
    var a = Singleton.getInstance('a');
    var b = Singleton.getInstance('b');
    console.log(a===b); //true

    "透明"的单例模式

    • "透明"的单例类,用户从这个类中创建对象的时候,可以像使用其他任何普通类一样
    • 直接 new 一个对象
    • 不能new 多个对象,扩展性不好
    var instace;
    function Person(name) {
        this.name = name;
        if (!instace) {
            instace = this;
        }
        return instace;
    }
    
    Person.prototype.getName = function () {
        console.log(this.name);
    };
    var a = new Person('a');
    var b = new Person('b');
    console.log(a===b);

     

    代理模式创建单例模式

    • 代理模式:自己不去做,委托中间人做
    • Person是一个普通类,通过new Person可以创建一个对象
    • 用代理模式创建CreateSinglePerson方法,通过new CreateSinglePerson可以创建一个单例

    JavaScript中的单例模式

    • 单例模式的核心是确保只有一个实例,并提供全局访问
    • 在JavaScript可以通过直接创建一个对象来实现单例模式
    • 可以用闭包的方式实现私有变量
    let MyApp = {
        name: 'app',
        getName: function () {
            console.log(this.name);
        }
    };
    let MyApp2 = (function () {
        var _name = 'app';
        return {
            getName: function () {
                console.log(_name);
            }
        }
    })();

     

    小结

    单例模式用到了闭包和高阶函数的特性。单例模式是简单但常用到的模式,比如单页应用、websocket连接等等。创建对象和管理单例的职责分布在不同的方法中,方便扩展和管理。

  • 相关阅读:
    spring整合freemarker 自定义标签
    curl 取不到第二个参数解决方法
    solr5.5教程-solr.home 配置
    solr5.5教程-schema.xml部分配置
    solr5.5教程-solrconfig.xml,加载schema.xml
    solr5.5教程-tomcat布署(2)
    solr5.5教程-tomcat布署
    jsp页面el表达式不起作用
    spring+hibernate--直接修改数据库,再通过hibernate查询数据不变
    13 hbase连接
  • 原文地址:https://www.cnblogs.com/magicg/p/13091466.html
Copyright © 2020-2023  润新知