资讯专栏INFORMATION COLUMN

Javascript 设计模式 -- Singleton(单例)模式

李涛 / 2000人阅读

摘要:从经典意义上来说模式,在该实例不存在的情况下,可以通过一个方法创建一个类来实现创建类的新实例如果实例已经存在,它会简单返回该对象的引用。模式的适用性描述如下当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。

从经典意义上来说

Singleton模式,在该实例不存在的情况下,可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,它会简单返回该对象的引用。Singleton不同于静态类,因为我们可以推迟他们的初始化。

var mySingleton = (function() {

    var instance;

    function init() {

        function privateMethod() {
            console.log("i am private");
        }

        var privateVariable = "i am also private";

        var privateRandomNumber = Math.random();

        return {
            publickMethod: function () {
                console.log("the public can see me");
            },

            publicProperty: "i am also public",

            getRandomNumber: function () {
                return privateRandomNumber;
            }
        };
    };

    return {
        getInstance: function() {
            if (!instance) {
                instance = init();
            }
            return instance;
        }
    };
}) ();

var myBadSingleton = (function() {
    var instance;
    function init() {
        var privateRandomNumber = Math.random();
        return {
            getRandomNumber: function() {
                return privateRandomNumber;
            }
        };
    };
    return {
        getInstance: function() {
            instance = init();
            return instance;
        }
    };
})();

var singleA = mySingleton.getInstance();
var singleB = mySingleton.getInstance();
console.log(singleA.getRandomNumber());
console.log(singleB.getRandomNumber());
console.log(singleA.getRandomNumber() === singleB.getRandomNumber());            // true

console.log("
");

var badSingleA = myBadSingleton.getInstance();
var badSingleB = myBadSingleton.getInstance();
console.log(badSingleA.getRandomNumber());
console.log(badSingleB.getRandomNumber());
console.log(badSingleA.getRandomNumber() === badSingleB.getRandomNumber());      // false

Singleton模式的适用性描述如下:
1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
2、该唯一的实例应该是通过子类化可扩展的,并且客户应该无需要改代码就能使用一个扩展的实例。

在实践中
var SingletonTester = (function() {
    function Singleton( options ) {
        options = options || { };
        this.name = "SingletonTester";
        this.pointX = options.pointX || 6;
        this.pointY = options.pointY || 10;
    }
    var instance;
    var _static = {
        name: "SingletonTester",
        getInstance: function ( options ) {
            console.log(instance + "
");
            if ( instance === undefined ) {
                instance = new Singleton( options );
            }
            return instance;
        }
    };
    return _static;
})();

var test1 = SingletonTester.getInstance({pointX: 15});
console.log(test1);

console.log("
");

var test2 = SingletonTester.getInstance({pointX: 7});
console.log(test2);

结果如图:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85437.html

相关文章

  • JavaScript设计模式----单例模式

    摘要:不符合设计模式中的单一职责的概念。引入代理实现单例模式引入代理实现单例模式的特点我们负责管理单例的逻辑移到了代理类中。的单例模式对比在以上的代码中实现的单例模式都混入了传统面向对象语言的特点。 声明:这个系列为阅读《JavaScript设计模式与开发实践》 ----曾探@著一书的读书笔记 1.单例模式的特点和定义 保证一个类仅有一个实例,并且提供一个访问它的全局访问点。 2.传统面向对...

    selfimpr 评论0 收藏0
  • JavaScript 设计模式(一):单例模式

    摘要:停更许久,近期计划更新设计模式系列。单例模式是创建型设计模式的一种。虽然它不是正规的单例模式,但不可否认确实具备类单例模式的特点。适用场景单例模式的特点,意图解决维护一个全局实例对象。 停更许久,近期计划更新:设计模式系列。 showImg(https://segmentfault.com/img/bVbt7uw?w=800&h=600); 单例模式:限制类实例化次数只能一次,一个类只...

    xialong 评论0 收藏0
  • 设计模式: 从ES5 到 TypeScript ——单例模式

    摘要:现在让我们设置温度值并将其增加减少几次小结在中,单例模式根据是否懒汉模式饿汉模式以及是否线程安全,分为很多种实现方式。参考设计模式与开发实践设计模式 Back in 1994, a book was authored by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides that discusses 23 desg...

    王军 评论0 收藏0
  • JavaScript 单例模式

    摘要:实现代码如下创建元素设置样式我们发现在开发中并不会单独使用遮罩层,遮罩层和弹出窗是经常结合在一起使用,前面我们提到过登陆弹窗使用单例模式实现也是最适合的。 定义 确保一个类仅有一个实例,并提供一个访问它的全局访问点。 单例模式使用的场景 比如线程池、全局缓存等。我们所熟知的浏览器的window对象就是一个单例,在JavaScript开发中,对于这种只需要一个的对象,我们的实现往往使用单...

    lijinke666 评论0 收藏0
  • JavaScript设计模式与开发实践系列之单例模式

    摘要:本系列为设计模式与开发实践作者曾探学习总结,如想深入了解,请支持作者原版单例模式实现单例模式单例模式的定义是保证一个类仅有一个实例,并提供一个访问它的全局访问点。 本系列为《JavaScript设计模式与开发实践》(作者:曾探)学习总结,如想深入了解,请支持作者原版 单例模式 实现单例模式 单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式是一种常用的模式...

    Airy 评论0 收藏0
  • 再遇设计模式JavaScript

    摘要:在面向对象的语言中,比如,等,单例模式通常是定义类时将构造函数设为,保证对象不能在外部被出来,同时给类定义一个静态的方法,用来获取或者创建这个唯一的实例。 万事开头难,作为正经历菜鸟赛季的前端player,已经忘记第一次告诉自己要写一些东西出来是多久以的事情了。。。如果,你也和我一样,那就像我一样,从现在开始,从看到这篇文章开始,打开电脑,敲下你的第一篇文章(或者任何形式的文字)吧。 ...

    Clect 评论0 收藏0

发表评论

0条评论

李涛

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<