zoukankan      html  css  js  c++  java
  • 模块模式和单例模式的详解

    模块模式

    模块模式使用闭包封装私有状态和组织。它提供了一种包装公有/私有方法和变量的方式,防止其泄露至全局作用域。通过该模式,只需返回一个共有api,而其他的一切都维持在私有闭包里。该模式返回一个对象。

    在模块模式中,由于闭包的存在,声明的变量和方法只在该模式内部可用,但在返回对象上定义的变量和方法,则对外部使用者都是可用的。

    举个例子:

    var testModule = (function(){
    	var counter = 0;
    	return {
    		incrementCounter: function(){
    			return ++counter;
    		},
    		resetCounter: function(){
    			counter = 0;
    		}
    	};
    })();
    

    上面的incrementCounter和resetCounter方法,只能通过testModule进行调用,并且里面的counter变量只能通过这两个方法进行访问。

    模块模式应用最广泛的情况:基于jquery或zepto开发插件。

    举个例子:

    var testModule = (function(jQ){
    	function privateMethod(){
    		jQ(".container").html("test");
    	}
    	return {
    		publicMethod: function(){
    			privateMethod();
    		}
    	};
    })(jQuery);
    

    我们可以在自己定义的模块testModule中使用jQuery,并且在模块内部,我们使用了别名jQ来表示jQuery。

    单例模式

    单例模式被熟知的原因是因为它限制了类的实例化次数只能一次。在该类的实例不存在的情况下,可以通过一个方法创建该类的实例,如果实例已经存在,它会简单返回该实例对象的引用。

    举个例子:

    var mySingleton = (function(){
    	var instance;
    	function init(){
    		function privateMethod(){
    			console.log("method call");
    		}
    		var privateVar = "I am private";
    		return {
    			publicMethod:function(){
    				privateMthod();
    			},
    			publicVar:"I am public",
    			getPrivateVar: function(){
    				return privateVar;
    			}
    		};
    	}
    	return {
    		getInstance: function(){
    			if(!instance){
    				instance = init();
    			}
    			return instance;
    		}
    	}
    })();
    

    当调用mySingleton.getInstance方法时,由于实例对象instance不存在,因此会调用init方法创建一个实例对象,这时instance引用此实例对象。当第二次调用mySingleton.getInstance方法时,由于instance存在,因此直接返回instance。

    在实践中,你的系统需要一个对象来协调其他对象时,单例模式是很有用的。

    加油!

  • 相关阅读:
    02注册Github账户
    软件工程概论第一节
    01课堂测试
    第二阶段冲刺01
    在子类中,若要调用父类中被覆盖的方法,可以使用super关键字
    动手动脑
    springBoot学习 错误记录
    什么是Hadoop?什么是HDFS?
    springCloud当中Eureca sever当中Camden到底是什么?
    Eureca Server的Helloworld例子
  • 原文地址:https://www.cnblogs.com/chaojidan/p/4476353.html
Copyright © 2011-2022 走看看