`

Javascript-设计模式之单例模式

阅读更多
/**
 * 单例模式一
 * 个人更倾向这种,代码简介
 */
var Singleton = (function(){
    var instantiated;
    function init(){
        /*singleton code here*/
        return {
            publicMethod: function(){
                console.log('hello world');
            },
            publicProperty: 'test'
        };
    }
    
    return {
        getInstance: function(){
            if (!instantiated) {
                instantiated = init();
            }
            return instantiated;
        }
    };
})();

/*calling public methods is then as easy as:*/
Singleton.getInstance().publicMethod();

/**
 * 单例模式二
 */
var SingletonTester = (function(){

    //args: an object containing arguments for the singleton
    function Singleton(args){
    
        //set args variable to args passed or empty object if none provided.
        var args = args || {};
        //set the name parameter
        this.name = 'SingletonTester';
        //set the value of pointX
        this.pointX = args.pointX || 6; //get parameter from arguments or set default
        //set the value of pointY
        this.pointY = args.pointY || 10;
        
    }
    
    //this is our instance holder
    var instance;
    
    //this is an emulation of static variables and methods
    var _static = {
        name: 'SingletonTester',
        //This is a method for getting an instance
        
        //It returns a singleton instance of a singleton object
        getInstance: function(args){
            if (instance === undefined) {
                instance = new Singleton(args);
            }
            return instance;
        }
    };
    return _static;
})();

var singletonTest = SingletonTester.getInstance({
    pointX: 5
});
console.log(singletonTest.pointX); // outputs 5 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics