java設計模式之單例模式學習_java

來源:互聯網
上載者:User

1 概述

單例模式有幾個好處:

(1)某些類建立比較頻繁,對於一些大型的對象,這是一筆很大的系統開銷。

(2)省去了new操作符,降低了系統記憶體的使用頻率,減輕GC壓力。

(3)有些類如證券交易所的核心交易引擎,控制著交易流程,如果該類可以建立多個的話,系統完全亂了。

2 詳解

單例模式常用的寫法有如下這麼兩種。

2.1 餓漢式

如果應用程式總是建立並使用單例模式,或者在建立和運行時壓力不是很大的情況下,可以使用一個私人靜態變數,提前把對象建立好。

複製代碼 代碼如下:

package org.scott.singleton;
/**
 * @author Scott
 * @version 2013-11-16
 * @description
 */
public class Singleton1 {
    private static Singleton1 uniqueInstance = new Singleton1();

    private Singleton1(){

    }

    public static Singleton1 getInstance(){
        return uniqueInstance;
    }
}

這樣做的話,當JVM載入這個類的時候,根據初始化的順序,就已經把對象建立好了。同時,JVM可以保證任何線程在訪問這個單例對象之前,一定先建立此執行個體,並且只建立一次。

當然,也可以使用一個靜態內部類來完成同樣的功能。

複製代碼 代碼如下:

package org.scott.singleton;
/**
 * @author Scott
 * @version 2013-11-16
 * @description
 */
public class Singleton2 { 

    private Singleton2() { 
    } 

    /**
     * 此處使用一個內部類來維護單例
     * */ 
    private static class SingletonFactory { 
        private static Singleton2 instance = new Singleton2(); 
    } 

    public static Singleton2 getInstance() { 
        return SingletonFactory.instance; 
    } 

    /**
     * 如果該對象被用於序列化,可以保證對象在序列化前後保持一致
     * */ 
    public Object readResolve() { 
        return getInstance(); 
    } 
}

2.2 雙重鎖方式
 “雙重鎖”,顧名思義就是兩把鎖,第一把鎖用來檢查要建立的執行個體對象是否已經建立了,如果尚未建立才使用第二把鎖來進行同步。

複製代碼 代碼如下:

package org.scott.singleton;
/**
 * @author Scott
 * @version 2013-11-16
 * @description
 */
public class Singleton3 {
    private volatile static Singleton3 uniqueInstance;

    private Singleton3(){

    }

    public static Singleton3 getInstance(){
        if(uniqueInstance == null){
            synchronized(Singleton3.class){
                if(uniqueInstance == null){
                    uniqueInstance = new Singleton3();
                }
            }
        }
        return uniqueInstance;
    }
}

如果對效能要求比較高的話,這種方式可以大大減少建立的時間,目前來說,這種方式也是比較通用的一種建立單例的方式。

聯繫我們

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