【javascript设计模式】4.单例模式

Singleton单例模式

单例模式,能够限制类的实例化次数只能为一次。单例模式,在该实例不存在的情况下,
可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,它会简单返回该对象的引用;

示例:

<script type="text/javascript">
    var mySingleton = (function () {
        //实例保持了singleton 的一个引用
        var instance;
        function init() {
            //singleton
            //私有方法和变量
            function privateMethod() {
                console.log("I am private");
            }
            var privateVariable = "I am also private";
            var privateRandomNumber = Math.random();
            return {
                //公有方法和变量
                publicMethod: function () {
                    console.log("The public can see me!");
                },
                publicProperty: "I am also public",
                getRandomNumber: function() {
                    return privateRandomNumber;
                }
            };
        };
        return {
            //获取singleton 的实例,如果存在就返回,不存在就创建新实例
            getInstance: function() {
                if(!instance) {
                    instance = init();
                }
                return instance;
            }
        };
    })();

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

在实践中,当在系统中确实需要一个对象来协调其他对象时,>Singleton模式很有用。

示例:

<script type="text/javascript">
    var SingletonTester = (function() {
        //options: 包含singleton所需配置信息的对象
        //var options = {name:"test",pointX:5};
        function Singleton(options) {
            //如果未提供options,则设置为空对象
            options = options || {};
            //为singleton设置一些属性
            this.name = "SingletonTester";
            this.pointX = options.pointX || 6;
            this.pointY = options.pointY || 10;
        }
        //实例持有者
        var instance;
        //静态变量和方法的模拟
        var _static = {
            name: "SingletonTester",
            //获取实例的方法,返回singleton对象的singleton实例
            getInstance: function(options) {
                if(instance === undefined) {
                    instance = new Singleton(options);
                }
                return instance;
            };
            return _static;
        }
    })();
    var singletonTest = SingletonTester.getInstance({
        pointX: 5
    });
    console.log(singletonTest.pointX);//5
script>

你可能感兴趣的:(javascript)