结束语:第 70 页的权威指南goog.addSingletonGetter()
定义如下:
对于具有零参数的构造函数的类,goog.addSingletonGetter()
将静态方法添加到其名为的构造函数中,该方法在getInstance()
调用时返回该对象的相同实例。一般来说,如果存在的话,应该使用它来代替构造函数。
一种方法是在第 143 页JavaScript 模式中介绍的静态属性设计模式中的实例之后创建一个单例,并添加一个静态函数。getInstance()
/**
* @param {string=} opt_x
* @param {string=} opt_y
* @constructor
*/
Foo = function(opt_x, opt_y) {
if(Foo.instance_) {
return Foo.instance_;
}
/**
* @type {string}
* @private
*/
this.x_ = goog.isDefAndNotNull(opt_x) ? opt_x : 'default_X';
/**
* @type {string}
* @private
*/
this.y_ = goog.isDefAndNotNull(opt_y) ? opt_y : 'default_Y';
Foo.instance_ = this;
};
/**
* Get the singleton instance of Foo.
* @param {string=} opt_x
* @param {string=} opt_y
*/
Foo.getInstance = function(opt_x, opt_y) {
if (Foo.instance_) {
return Foo.instance_;
}
return new Foo(opt_x, opt_y);
};
使用这种模式的好处是,它可以防止您在有人编写时意外构造多个实例:
var foo = new Foo();
...
// thousands of lines later
var snafoo = new Foo(); // Returns the singleton instance.