設計模式之—單例模式(Singleton)-Java實現

來源:互聯網
上載者:User

     單例模式限制了使用這個模式的類只能產生一個對象。有一些對象其實我們完全只需要一個即可,如:線程池(threadpool)、緩衝(cache)、註冊表(registry)的對象、裝置的驅動程式的對象等等。事實上,這些類的對象只能有一個執行個體,如果製造出多個執行個體,就會導致許多問題的產生,例如:程式的行為異常、資源的過量使用、產生不一致的結果等等。Java
Singleton模式就為我們提供了這樣實現的可能。是用Singleton的好處還在於可以節省記憶體,因為它限制了執行個體的個數,有利於Java記憶體回收(garbage collection)。

 

     下面我就用代碼來實現一個Singleton模式:

public class Singleton {private static Singleton instance = new Singleton();private Singleton(){}public static Singleton getInstance(){return instance;}}

註解:

    static這個關鍵字,它是Singleton模式的核心。

    1.Singleton類的成員變數instance被聲明為staitc就意味著這個成員變數只有一份(而不是每個對象一份)。

    2.getInstance()這個方法是static的就是說,這個方法在Singleton這個類沒有被執行個體化的時候就能使用。

    3.當Singleton這個類被載入的時候(即:執行Singleton singleton1 = Singleton.getInstance();這句話的時候,注意不是這句話Singleton singleton1; ),這個類的靜態成員變數instance被初始化(private
static Singleton instance = new Singleton(); 這句話被執行),然後(注意是先初始化,再調用)調用getInstance()方法返回這個成員變數instance,當執行Singleton singleton2 = Singleton.getInstance();這句話的時候,因為instance被聲明成static,因此,private
static Singleton instance = new Singleton(); 不會被(注意是不會被)再次調用,而是直接調用getInstance()方法,返回同一個instance。這樣就實現了Singleton這個模式。

下面是一些擴充,既然我們能夠限制類只能產生一個對象,那麼就能限制它最多產生指定數量個對象,代碼如下:

public class Singleton {    private Singleton(){}       private static int count = 0;       public synchronized static Singleton getInstance() {           if(count < 10){              count++;              return new Singleton();           }else{              return null;          }             }   }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.