zoukankan      html  css  js  c++  java
  • 01-单例模式

    单例模式:首先我们需要理解什么是单例。
    :指的是一个。
    :指的是创建的实例。
    单例:指的是创建的总是同一个实例。也就是使用类创建的实例始终是相同的。

    1 class Person{
    2   constructor(){}
    3 }
    4 let p1 = new Person();
    5 let p2 = new Person();
    6 console.log(p1===p2) //false

    上面这段代码,定义了一个Person类,通过这个类创建了两个实例,我们可以看到最终这两个实例是不相等的。也就是说,通过同一个类得到的实例不是同一个(这本就是理所应当),但是如果我们想始终得到的是同一个实例,那么这就是**单例模式**。那么应该如何实现单例模式了:
    想要实现单例模式,我们需要注意两点:

      1. 需要使用return。使用new的时候如果没有手动设置return,那么会默认返回this。但是,我们这里要使得每次返回的实例相同,也就是需要手动控制创建的对象,因此这里需要使用return
      2. 我们需要每次return的是同一个对象。也就是说实际上在第一次实例的时候,需要把这个实例保存起来。再下一个实例的时候,直接return这个保存的实例。因此,这里需要用到闭包了
     1 var Person = (function() {
     2     let instance = null;
     3     return class {
     4         constructor() {
     5             if (!instance) {
     6                 //第一次创建实例,那么需要把实例保存
     7                 instance = this;
     8             } else {
     9                 return instance;
    10             }
    11         }
    12     }
    13 })()
    14 let p3 = new Person();
    15 let p4 = new Person();
    16 console.log(p3 === p4) //true

    ES5写法:

     1 var single = (function() {
     2     var demo;
     3     return function(name) {
     4         if (demo) {
     5             return demo;
     6         }
     7         this.name = name;
     8         demo = this;
     9     }
    10 })()
    11 
    12 var s1 = new single();
    13 var s2 = new single();
    14 console.log(s1 === s2); //true

    从上面的代码中,我们可以看到在闭包中,使用变量来保存创建的实例,每次返回的都是第一次创建的实例。这样的话就实现了无论创建多少次,创建的都是同一个实例,这就是单例模式。

  • 相关阅读:
    设计模式-工厂模式-场景以及优缺点-目的就是应对变化 (国江面试回答的)
    开启otl的64位长整数支持
    otl翻译(11) -- OTL的迭代器
    OTL翻译(10) -- OTL的流缓冲池
    OTL翻译(9) --常量的SQL语句
    OTL翻译(8) -- otl_long_string/otl_long_unicode_string类
    OTL翻译(7) -- otl_exception类
    OTL翻译(6) -- otl_connect类
    OTL翻译(5) -- otl_stream流相关绑定变量
    OTL翻译(4) -- otl_stream类
  • 原文地址:https://www.cnblogs.com/haoqiyouyu/p/14730911.html
Copyright © 2011-2022 走看看