JavaScript設計模式——單例模式

孤單是一個人的狂歡——單例模式

喧囂的夜晚,肆無忌憚的人群,一切都讓人紙醉金迷。越是這個時候,坐在角落的自己越顯得孤單,像極了單例模式。
咳咳咳,扯遠了。

單例模式:又被稱為單體模式,只允許實例化一次的對象類。即便多次實例化該類,返回的仍是第一次實例化后的對象。

簡單的單例模式

不要被單例模式這幾個字給唬住了,毛主席教導我們:一切反動派都是紙老虎。通過最簡單的單例模式,我們揭開紙老虎的面紗:

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
  }
})()

寫在最后

最近突然能閑下心來,靜靜地看一些東西。還是希望自己能心平氣和的去看待一些東西,接受一些東西,更好地成長,更好的奮斗吧。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容