設計模式之單例設計模式

2021-08-07 03:32:48 字數 2291 閱讀 2908

singleton:保證乙個類只有乙個例項,並提供訪問它的全域性訪問點

//類初始化時,立即載入這個物件(沒有延時載入的優勢)。載入類時,天然的是執行緒安全的!

private

static singletondemo1 instance = new singletondemo1();

private

singletondemo1()

//方法沒有同步,呼叫效率高!

public

static singletondemo1 getinstance()

餓漢式單例模式,其中使用私有化構造器避免從外部初始化類,但是可以類沒用用到,浪費資源

public

class singletondemo2

//方法同步,呼叫效率低!

public

static synchronized singletondemo2 getinstance()

return instance;}}

懶漢式 synchronized避免多個執行緒建立多個物件

懶載入 lazy load 每次都要同步,呼叫效率不高

如果乙個類建立的代價比較高,使用這種模式

下面三種相對來講不是特別常用:

1.雙重檢測鎖

public

class

singletondemo3

} instance = sc;

} }

} return instance;

} private

singletondemo3()

}

2.靜態內部類(好用)

public

class singletondemo4

private

singletondemo4()

//方法沒有同步,呼叫效率高!

public

static singletondemo4 getinstance()

}

結合了懶載入 執行緒安全 高效呼叫

靜態方法只有呼叫的時候才載入

3.通過列舉實現單例模式

public

enum singletondemo5

}

可以避免反射和反序列化漏洞

缺點是沒有延遲載入

從對比上來講,如果物件初始化占用資源大,需要延時載入,那麼靜態內部類好於懶漢式

如果物件初始化占用資源少,不需要延時載入,那麼列舉式好於餓漢式

public

class client2

}

破解的方法

public

class

singletondemo6

implements

serializable

}//方法同步,呼叫效率低!

public

static

synchronized singletondemo6 getinstance()

return instance;

}//反序列化時,如果定義了readresolve()則直接返回此方法指定的物件。而不需要單獨再建立新物件!

private object readresolve() throws objectstreamexception

}

幾種設計模式的呼叫效率

}countdownlatch.await(); //main執行緒阻塞,直到計數器變為0,才會繼續往下執行!

long end = system.currenttimemillis();

system.out.println("總耗時:"+(end-start));}}

設計模式之 單例設計模式

單例設計模式 單例設計模式概述 單例模式就是要確保類在記憶體中只有乙個物件,該例項必須自動建立,並且對外提供。優點 在系統記憶體中只存在乙個物件,因此可以節約系統資源,對於一些需要頻繁建立和銷毀的物件單例模式無疑可以提高系統的效能。缺點 沒有抽象層,因此擴充套件很難。職責過重,在一定程式上違背了單一...

設計模式之單例設計模式

目錄 1.到底什麼是設計模式?2.什麼是單例設計模式?3.單列設計模式的兩種實現方式 餓漢式懶漢式 執行緒不安全 4.執行緒安全的寫法 餓漢式懶漢式 執行緒安全 設計模式可以理解為別人成功的故事,通用的套路,前人的經驗,設計模式是一種思想,沒有具體的實現。打乙個比方 世界上只有乙個太陽,乙個月亮,單...

設計模式之單例設計模式

核心作用 保證乙個類只有乙個例項,並提供乙個訪問該例項的全域性訪問點 單例模式分為 懶漢式 餓漢式 雙重檢測鎖 內部類式 列舉式 public class lazysingleclass 構造器私有化 public static lazysingleclass getinstance 餓漢式 只是宣...