用JavaScript来实现单例模式

首先,了解一下什么是单例模式,这里我直接把菜鸟教程中的定义给copy过来:

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
注意:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

用一句话来总结就是:在单例模式中,一个类仅有一个实例,并提供一个访问它的全局访问点。这无非是用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象,在JavaScript我们很自然而然就会想到用闭包来解决这个问题。

比如说需要生成一个页面登录框,因为有且只可能有一个登录框,那么你就可以用单例的思想去实现他,代码如下:

 1 let createLoginWindow = function(title) {
 2     this.title= title;
 3     this.init();
 4 }
 5 
 6 createLoginWindow.prototype.init = function() {
 7     // some code
 8     
 9 }
10 let proxySingleton = (function() {
11     var instance;
12     return function(title) {
13         if (!instance) {
14             instance = new createLoginWindow(title);
15         }
16         return instance;
17     }
18 })();
19 let windowA = new proxySingleton('login1');
20 let windowB = new proxySingleton('login2');
21 
22 console.log(windowA === windowB); // true

可以看到,上述代码中createLoginWindow负责构造对象,然后通过代理proxySingleton来判断是构造新的对象还是返回已有对象。

posted @ 2019-10-29 23:03  卑微小陈的随笔  阅读(395)  评论(0编辑  收藏  举报