• js --单例模式


    定义

    一个构造函数在构造出一个对象后,之后再使用这个构造函数构造对象时,不会是新的对象,依旧是上一次的对象.也就是说:::

    确保一个类仅有一个实例,并提供一个访问它的全局访问点。

    通过一个实用场景来理解单例模式的概念。当我们点击登录按钮的时候,会出现一个登录的弹窗,而这个弹窗是唯一的,不论我们点击多少次登录按钮,弹窗只会被创建一次。

    单例模式使用的场景

    比如线程池、全局缓存等。我们所熟知的浏览器的window对象就是一个单例,在JavaScript开发中,对于这种只需要一个的对象,我们的实现往往使用单例。

    实现思路

    用一个变量来标识当前的类已经创建过对象,如果下次获取当前类的实例时,直接返回之前创建的对象即可。

    实现1:最简单的对象字面量

    var singleton = {
            attr : 1,
            method : function(){ return this.attr; }
        }
    var t1 = singleton ;
    var t2 = singleton ;
      那么很显然的, t1 === t2 。

    这个在平常使用的时候,还是挺多的,在没有学习单例设计模式的概念之前,不知道这种也属于单例的。不过,存在的不足之处就是没有什么封装,所有的属性方法都是暴露的。对于一些需要使用私有变量的情况也不太合适。不过就通过这个例子加深一下对单例的概念的理解。

    实现2:

    // 定义一个类
    function Singleton(name) {
        this.name = name;
        this.instance = null;
    }
    // 原型扩展类的一个方法getName()
    Singleton.prototype.getName = function() {
        console.log(this.name)
    };
    // 获取类的实例
    Singleton.getInstance = function(name) {
        if(!this.instance) {
            this.instance = new Singleton(name);
        }
        return this.instance
    };
    
    // 获取对象1
    var a = Singleton.getInstance('a');
    // 获取对象2
    var b = Singleton.getInstance('b');
    // 进行比较
    console.log(a === b); // true

    总结:

      总的来说,单例模式相对而言是各大模式中较为简单的,但是单例模式也是较为常用并且很有用的模式。在JS中尤为突出(每个对象字面量都可以看做是一个单例么~)。
        记住,是否严格的只需要一个实例对象的类(虽然JS没有类的概念),那么就要考虑使用单例模式。
        使用数据缓存来存储该单例,用作判断单例是否已经生成,是单例模式主要的实现思路。
  • 相关阅读:
    《20171101-构建之法:现代软件工程-阅读笔记》
    《软件工程课程总结》
    《20171122-构建之法:现代软件工程-阅读笔记》) (5分)
    阅读任务-阅读提问-4
    《20171115构建之法:现代软件工程-阅读笔记》)
    对软件工程的期望
    自我介绍
    Javaweb学习计划
    分布式事务解决方案
    countdown模式
  • 原文地址:https://www.cnblogs.com/mn6364/p/10944872.html
Copyright © 2020-2023  润新知