單例模式也稱為單子模式,更多的也叫做單體模式。為軟體設計中較為簡單但最常用的一種設計模式。
單例模式的介紹:
在應用單例模式時,產生單例的類別必須確保只有一個實例的存在,很多時候整個系統只需要擁有一個全域對象,才有利於協調系統整體的行為。例如在整個系統的設定檔中,配置資料有一個單例物件進行統一讀取和修改,其他物件需要配置資料的時候也統一透過該單例物件來取得配置數據,這樣就可以簡化複雜環境下的配置管理。
單例模式的想法是:一個類別能傳回一個物件的引用(並且永遠是同一個)和一個獲得該實例的方法(靜態方法,通常使用 getInstance 名稱)。那麼當我們呼叫這個方法時,如果類別所持有的引用不為空就回傳該引用,否者就建立該類別的實例,並且將實例引用賦值給該類別保持的那個參考再回傳。同時將該類別的建構函數定義為私有方法,避免其他函數使用該建構函式來實例化對象,並且只透過該類別的靜態方法來得到該類別的唯一實例。
一般情況下,Javascript每次new一個物件都會產生一個實例,實例指向不同的位址。就像如下:
(function(){ function Person(name){ this.name = name; } Person.prototype.work = function(){ console.log(this.name + " is working"); } var p1 = new Person("Darren"); p1.work(); var p2 = new Person("Jack"); p2.work(); }());
以上,每次new出一個Person物件都是不同的。
如何在Javascript中實作單例模式呢?
--在生成某各物件時先判斷是否存在。存在就不生成對象,不存在就生成對象。
(function(){ var PersonSingleton = (function(){ var instance; function init(){ return { name: 'Anonymous', work: function(){ console.log(this.name + ' working'); } }; } return { getInstance: function(){ if(!instantiated){ instantiated = init(); } return instantiated; } } })(); var p1 = PersonSingleton.getInstance(); p1.work(); var p2 = PersonSingleton.getInstance(); p2.work(); }());
以上,透過PsonSIngleton物件的getInstance方法得到的實例每次都是一樣的。
關於javascript單例模式的相關知識就給大介紹到這裡,希望對大家有幫助。