单体模式

2022-06-09 08:42:33 浏览数 (1)

三、单体模式

单体模式是设计模式中最常用的一种。单体模式就是希望可以在使用方法创建对象的时候,我们无论创建多少次对象都指向同一个

1、普通创建对象方式

代码语言:javascript复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
    
    function notSingle() {
        return {
            a: 1
        }
    }

    var a = notSingle()
    var b = notSingle()

    console.log(a === b) // 打印 false

    function notSingle2() {
        this.a = 123
    }

    var a1 = new notSingle2()
    var a2 = new notSingle2()

    console.log(a1 === b1); // 打印 false

    // 无论是使用函数,还是用构造函数的情况下,我们创建出来的对象都是相互独立的
    // 在绝大多数情况下,这也是我们所期望的结果,这是没问题的
    // 当在某些情况下,我们需要他们创建出来的返回的数据是已经被创建出来的对象数据,而不是再去创建出来的新的对象

    
    </script>
</head>
<body>
    
</body>
</html>

2、单体模式创建对象

代码语言:javascript复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
    
    var _unique = null;

    function createSingle() {
        var obj = {
            a: 1
        }
        if (_unique === null) {
            _unique = obj
        }
        return _unique
    }

    var a = createSingle()
    var b = createSingle()

    console.log(a === b) // 打印true

    var a1 = createSingle()
    _unique = null // 在中途修改了_unique都会导致返回的对象不一致
    var b1 = createSingle()

    console.log(a1 === b1) // false

    var createSingle1 = (function() {
        var _unique = null;

        function single() {
            return {
                a: 1
            }
        }

        return function() {
            if (_unique === null) {
                // _unique = {
                //     a: 1
                // }
                _unique = single()
            } else {
                return _unique
            }
        }
    })()

    var a2 = createSingle1()
    var b2 = createSingle1()
    console.log(a2 === b2)

    </script>
</head>
<body>
    
</body>
</html>

0 人点赞