Java19單例模式

通過某個(gè)類創(chuàng)建對(duì)象時(shí),在整個(gè)程序中,只能創(chuàng)建一個(gè)對(duì)象,這種類稱為單例類。

餓漢式(類一旦加載,單例就初始化完成,保證調(diào)用getInstance的時(shí)候,單例已經(jīng)存在)

單例類會(huì)一直占用資源

package com.javawu.singleton;
public class Singleton{

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

懶漢式(延遲加載,調(diào)用getInstance的時(shí)候才回去初始化這個(gè)單例)

package com.javawu.singleton;

public class Singleton{
#2.聲明類的靜態(tài)變量(靜態(tài)變量跟對(duì)象無關(guān))
    private static Singleton singleton = null;
    
#1.使用private修飾默認(rèn)的構(gòu)造方法(類外部不能使用new創(chuàng)建對(duì)象)
    private Singleton () {
        // TODO 自動(dòng)生成的構(gòu)造函數(shù)存根
    }
#3.創(chuàng)建返回對(duì)象的方法
#4.判斷,對(duì)象存在不再創(chuàng)建
#5.(1)為了保證線程同步,改為同步方法(每次調(diào)用都會(huì)做線程同步)
    public static synchronized Singleton getInstance() {
        if(singleton == null) {
            singleton = new Singleton ();
        }
        return singleton;
    }
#5.(2)雙重檢查鎖定(和1相比只有第一次調(diào)用單例的時(shí)候才會(huì)做線程同步)
//使用雙重檢查鎖定,signleton需要用volatile修飾
//即 private volatile static Singleton sigleton = null;
//詳見:http://www.iteye.com/topic/652440
    public static Singleton getInstance() {
        if(singleton == null) {
            synchronized(Singleton.class) {
                if(singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
#5.(3)靜態(tài)內(nèi)部類(3種延遲加載方式中最優(yōu)的)
    public static Singleton getInstance() {
        private static class Holder {
            private static final Singleton instance = new Singleton();
        }
        private Singleton() {
        }
        public static final Singleton getInstance() {
            return Holder.instance;
        }
    }
}

據(jù)稱還有一個(gè)最佳的單例實(shí)現(xiàn)方法--單個(gè)成員的枚舉

package com.javawu.singleton;

public enum Singleton {
    //定義一個(gè)枚舉元素
    instacnce;
    //這個(gè)單例類具有的方法
    public void method() {
        
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容