孤單是一個人的狂歡——單例模式
喧囂的夜晚,肆無忌憚的人群,一切都讓人紙醉金迷。越是這個時候,坐在角落的自己越顯得孤單,像極了單例模式。
咳咳咳,扯遠了。
單例模式:又被稱為單體模式,只允許實例化一次的對象類。即便多次實例化該類,返回的仍是第一次實例化后的對象。
簡單的單例模式
不要被單例模式這幾個字給唬住了,毛主席教導我們:一切反動派都是紙老虎。通過最簡單的單例模式,我們揭開紙老虎的面紗:
let singleton = {
name: "單例模式",
singleMethod: function () {}
}
這便是最簡單的單例模式了,即字面量創(chuàng)建對象。我們通過其全局暴露的對象singleton,采用singleton.singleMethod()的方式調用其內部方法即可。
惰性單例
惰性單例也稱之為:惰性創(chuàng)建。即在需要的時候才創(chuàng)建的對象實例。
字面量創(chuàng)建單例畢竟只適用于簡單的應用場景,當我們需要創(chuàng)建復雜的單例時,還是需要采用構造函數的方式實例化對象。
let lazySingle = (function () {
// 單例實例引用
let _instance = null;
// 單例
function Single() {
/* 這里定義私有屬性和方法 */
return {
publicMethod: function () {},
publicProperty: '1.0'
}
}
// 獲取單例對象接口
return function () {
// 如果為創(chuàng)建單例將創(chuàng)建單例
if(!_instance) {
_instance = Single();
}
// 返回單例
return _instance;
}
})();
lazySingle實際上是一個函數,_instance為實例對象,初始值為null,init是它的構造函數,用于實例化對象。立即執(zhí)行函數返回的是匿名函數,用于判斷實例是否創(chuàng)建,只有當調用lazySingle的時候實例化。
不在js加載時就進行實例化創(chuàng)建,而是在需要的時候,再進行單例的創(chuàng)建。如果,再次調用,則返回的是第一次實例化后的實例對象。
let instance1 = lazySingle();
let instance2 = lazySingle();
console.log(instance1 === instance2); //true
單例模式的應用
命名空間(namespace)
作為最優(yōu)秀的前端框架之一的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
}
})()
寫在最后
最近突然能閑下心來,靜靜地看一些東西。還是希望自己能心平氣和的去看待一些東西,接受一些東西,更好地成長,更好的奮斗吧。