博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模块模式和单例模式的详解
阅读量:7034 次
发布时间:2019-06-28

本文共 1427 字,大约阅读时间需要 4 分钟。

模块模式

模块模式使用闭包封装私有状态和组织。它提供了一种包装公有/私有方法和变量的方式,防止其泄露至全局作用域。通过该模式,只需返回一个共有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。

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

 

 

 

加油!

转载于:https://www.cnblogs.com/chaojidan/p/4476353.html

你可能感兴趣的文章
Python如何批量给云主机配置安全组?
查看>>
iOS音频播放 (四):AudioFile
查看>>
Oracle 存储过程异常处理
查看>>
URL里面存在下划线导致SESSION在IE下被分隔
查看>>
自定义注册的 Windows服务 无法访问网络共享文件解决办法
查看>>
Python之 set的特点
查看>>
postgersql日志备份和还原
查看>>
ubuntu mysql 命令
查看>>
域名转IP (Java实现)
查看>>
【Neuroph】1、项目Maven引用最新包
查看>>
高并发与多线程区别
查看>>
nginx日志分析工具 goaccess-nginx
查看>>
手机可以实现利用putty来管理Linux服务器
查看>>
我是如何准备ThoughtWorks面试的
查看>>
the request was rejected because its size (2877943
查看>>
修改Servlet的默认模板
查看>>
简单的pythonweb程序
查看>>
RemoteView概述
查看>>
JAVA集合小结
查看>>
ubuntu下android 源码下载
查看>>