孤单是一个人的狂欢——单例模式
喧嚣的夜晚,肆无忌惮的人群,一切都让人纸醉金迷。越是这个时候,坐在角落的自己越显得孤单,像极了单例模式。
咳咳咳,扯远了。
单例模式:又被称为单体模式,只允许实例化一次的对象类。即便多次实例化该类,返回的仍是第一次实例化后的对象。
简单的单例模式
不要被单例模式这几个字给唬住了,毛主席教导我们:一切反动派都是纸老虎。通过最简单的单例模式,我们揭开纸老虎的面纱:
let singleton = {
name: "单例模式",
singleMethod: function () {}
}
这便是最简单的单例模式了,即字面量创建对象。我们通过其全局暴露的对象singleton
,采用singleton.singleMethod()
的方式调用其内部方法即可。
惰性单例
惰性单例也称之为:惰性创建。即在需要的时候才创建的对象实例。
字面量创建单例毕竟只适用于简单的应用场景,当我们需要创建复杂的单例时,还是需要采用构造函数的方式实例化对象。
let lazySingle = (function () {
// 单例实例引用
let _instance = null;
// 单例
function Single() {
/* 这里定义私有属性和方法 */
return {
publicMethod: function () {},
publicProperty: '1.0'
}
}
// 获取单例对象接口
return function () {
// 如果为创建单例将创建单例
if(!_instance) {
_instance = Single();
}
// 返回单例
return _instance;
}
})();
lazySingle
实际上是一个函数,_instance
为实例对象,初始值为null
,init
是它的构造函数,用于实例化对象。立即执行函数返回的是匿名函数,用于判断实例是否创建,只有当调用lazySingle
的时候实例化。
不在js加载时就进行实例化创建,而是在需要的时候,再进行单例的创建。如果,再次调用,则返回的是第一次实例化后的实例对象。
let instance1 = lazySingle();
let instance2 = lazySingle();
console.log(instance1 === instance2); //true
单例模式的应用
命名空间(namespace)
作为最优秀的前端框架之一的jQuery
,就利用单例模式为它提供了一个命名空间:jQuery
。当我们需要调用其中的方法时,只需使用jQuery.xxx
的方式,即可。
那么在多人合作的项目里,难免会碰到相同的命名方法,我们只需使用单例模式为其提供不同的命名空间,便不会出现代码、命名冲突的问题。
模块分明
简单的说,就是将一类模块,归置到同一个模块下面。
let module = (function(){
//dom模块
let dom = {
addClass: function() {},
getElementById: function() {}
}
//event模块
let events = {
preventDefault: function() {},
stopPropagation: function() {}
}
return {
dom: dom,
event: events
}
})()
写在最后
最近突然能闲下心来,静静地看一些东西。还是希望自己能心平气和的去看待一些东西,接受一些东西,更好地成长,更好的奋斗吧。