理解js設計模式之單例模式

來源:互聯網
上載者:User

標籤:不能   log   type   聲明   help   javascrip   new   script   second   

單例模式的定義:只提供唯一的一個執行個體來讓你訪問

js中單例是天然存在的:

var a1={  hello:‘js‘}var a2={  hello:‘js‘}console.log(a1===a2) //false

  任意產生的一個對象字面量其實就是一個對象而且他也是唯一的,對象字面量聲明對象的方式,每次都會在對記憶體中建立一個新的空間,所以不管你對象裡面的東西一不一樣,他們就是不一樣的(本質是地址不一樣)

但是這樣的單例是不可靠的,很容易被覆蓋。。。你將a1,a2賦一個新的值,之前的單例對象就被記憶體回收了

如何產生可靠的單例?    用js的閉包可以很容易的做到這一點

var Singleton=function(name){    this.name=name;}Singleton.prototype.getName=function(){    return this.name;}Singleton.getInstance=(function(){   var instance=null;   return function(name){    if(!instance)  return instance=new Singleton(name);     return instance;   }})()var one=Singleton.getInstance(‘I am first one‘);var two=Singleton.getInstance(‘I am second one‘);console.log(one===two);   //trueconsole.log(one);console.log(two);

  

這樣就完成了一個簡單的單例模式,書上將這種寫法稱為 ‘不透明’ 的單例模式,因為產生一個單例要通過  Singleton.getInstance 這個方法來獲得,不能像正常建立對象那樣,也就是new Singleton() 這樣,這種稱為 ‘透明’ 的單例模式;

然而,其實單例模式的實現方式上:就是維護一個可訪問的變數,來標誌是否已經產生了一個執行個體了,如果產生了就將他返回,沒有產生就建立一個,儲存起來

那麼,閉包的優勢又體現出來了:

var Singleton=(function(){   var instance=null;   function SingletonHelper(name){       if(instance) return instance;       this.name=name;       return instance=this;  //將第一個new 產生的對象儲存在instance 下一個new 要去產生的時候就會返回這個執行個體   }   SingletonHelper.prototype.getName=function(){     return this.name;   }   return SingletonHelper;})()var one=new Singleton(‘I am first one‘);var two= new Singleton(‘I am second one‘);console.log(one);console.log(two);console.log(one===two);

  這樣就可以正常的去new 一些對象,而且不管你new 幾個,結果都是一樣的,都是第一個產生的那個對象

理解js設計模式之單例模式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.