javascript设计模式-单例模式(singleton pattern)

最简单的单例模式

var mySingleton = {
    property1: "something",
    property2: "something else",
    method1: function () {
        console. log('hello world' );
    }
};

扩展单例模式,增加私有变量和私有方法

var mySingleton = function () {
    // 私有变量
    var privateVariable = 'something private' ;
    // 私有方法
    function showPrivate() {
        console. log(privateVariable);
    }
    // 单例
    return {
        // 公有方法
        publicMethod: function () {
            // 内部访问私有方法
            showPrivate();
        },
        // 公有变量
        publicVar: 'the public can see this!'
    };
};
var single = mySingleton();
single.publicMethod();
console.log(single.publicVar);

按需初始化

var Singleton = (function() {
    var instantiated;
    function init() {
        // 单例
        return {
            publicMethod: function () {
                console. log('hello world' );
            },
            publicProperty: 'test'
        };
    }
    return {
        getInstance: function () {
            if (! instantiated) {
                instantiated = init();
            }
            return instantiated;
        }
    };
})();
Singleton.getInstance().publicMethod();

其它变种

var SingletonTester = (function () {
    function Singleton(options) {
        options = options || {};
        this.name = 'SingletonTester' ;
        this.pointX = args. pointX || 6;
        this.pointY = args. pointY || 10;
    }
    // 实例holder
    var instance;
    // 模拟静态变量和静态方法
    var _static = {
        name: 'SingletonTester' ,
        getInstance: function (options) {
            if (instance === undefined) {
                instance = new Singleton(options); 
            }
            return instance; 
        }
    }; 
    return _static;
})();
var singletonTest = SingletonTester.getInstance({
            pointX: 5
        });
console.log(singletonTest.pointX);


转载于:https://my.oschina.net/osmos/blog/386524

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值