JavaScript singleton pattern
In JavaScript, it would let you feel struggle to implement singleton design pattern. This is my first experiment:
Reference:
http://stackoverflow.com/questions/1635800/javascript-best-singleton-pattern
http://fstoke.me/blog/?p=1932
http://www.dotblogs.com.tw/blackie1019/archive/2013/08/30/115977.aspx
View = {
_viewer: undefined,
initView: function() {
// init view
},
getView: function() {
// get view
return _viewer;
}
};
But I figure out this approach can't express 'encapsulate', so the user can get _viewer directly. Therefore, I decide to rewrite it. I rewrite it to:
var View = ( function() {
var _viewer = undefined;
function init() {
// init view
};
function getView() {
// get view
return _viewer;
};
return {
init(): { init(); },
getView(): { return getView(); }
};
};
} ) ();
This method can achieve 'encapsulate', uses its method like View.getView(), but you have to program the interface two times on function and return parts. Finally, I decide to use the bottom method, this method is the perfect solution for me now.
// unstrict mode:
var View = ( function() {
if ( arguments.callee._singletonInstance )
return arguments.callee._singletonInstance;
arguments.callee._singletonInstance = this;
var _viewer = undefined;
this.init = function() {
// init view
};
this.getView = function() {
// get view
return _viewer;
};
};
} ) ();
new View();
// strict mode:
var View = ( function() {
if (View.prototype._singletonInstance)
return View.prototype._singletonInstance;
View.prototype._singletonInstance = this;
var _viewer = undefined;
this.init = function() {
// init view
};
this.getView = function() {
// get view
return _viewer;
};
};
} ) ();
new View();
This method you also can use its method like this way View.getView();, however you needn't multiple define the interfaces.Reference:
http://stackoverflow.com/questions/1635800/javascript-best-singleton-pattern
http://fstoke.me/blog/?p=1932
http://www.dotblogs.com.tw/blackie1019/archive/2013/08/30/115977.aspx
Comments
Post a Comment