單例設(shè)計(jì)模式
- 單例設(shè)計(jì)模式介紹
- 單例設(shè)計(jì)模式的八種方法
2.1 餓漢式(靜態(tài)常量)
2.1.1 實(shí)現(xiàn)步驟
2.1.2 代碼實(shí)現(xiàn)
2.1.3 優(yōu)缺點(diǎn)分析
2.2 餓漢式(靜態(tài)代碼塊)
2.1 代碼實(shí)現(xiàn)
2.2 優(yōu)缺點(diǎn)分析
2.3 懶漢式(線程不安全)
2.3.1 代碼實(shí)現(xiàn)
2.3.2 優(yōu)缺點(diǎn)分析
2.4 懶漢式(線程安全,同步方法)
2.4.1 代碼實(shí)現(xiàn)
2.4.2 優(yōu)缺點(diǎn)分析
2.5 略
2.6 雙重檢查
2.6.1 代碼實(shí)現(xiàn)
2.6.2 優(yōu)缺點(diǎn)分析
2.7 靜態(tài)內(nèi)部類
2.7.1 代碼實(shí)現(xiàn)
2.7.2 優(yōu)缺點(diǎn)分析
2.8 枚舉
2.8.1 代碼實(shí)現(xiàn)
2.8.2 優(yōu)缺點(diǎn)分析
3 注意事項(xiàng)和細(xì)節(jié)說(shuō)明 - 單例設(shè)計(jì)模式介紹
單例設(shè)計(jì)模式:就是采取一定的方法保證在整個(gè)的軟件系統(tǒng)中匿级,對(duì)某個(gè)類只能存在一個(gè)對(duì)象實(shí)例陶缺,并且該類只提供一個(gè)取得其對(duì)象實(shí)例的方法(靜態(tài)方法)丰嘉。
- 單例設(shè)計(jì)模式的八種方法
- 餓漢式(靜態(tài)常量)
- 餓漢式(靜態(tài)代碼塊)
- 懶漢式(線程不安全)
- 懶漢式(線程安全,同步方法)
- 懶漢式(線程安全,同步代碼塊)
- 雙重檢查
- 靜態(tài)內(nèi)部類
- 枚舉
2.1 餓漢式(靜態(tài)常量)
2.1.1 實(shí)現(xiàn)步驟
- 構(gòu)造器私有化(防止 new)
- 類的內(nèi)部創(chuàng)建對(duì)象
- 向外暴露一個(gè)靜態(tài)的公共方法:getInstance()
2.1.2 代碼實(shí)現(xiàn)
/**
- @ClassName SingletonType01
- @Description 餓漢式 -- 靜態(tài)變量
- @Author liu wq* @Date 2019/10/13 11:29
- @Version 1.0
/
public class SingletonType01 {
/*- 私有化構(gòu)造方法
*/
private SingletonType01() {
}
private static final SingletonType01 instance = new SingletonType01();
public static SingletonType01 getGetInstence () {
return instance;
}
}
- 私有化構(gòu)造方法
2.1.3 優(yōu)缺點(diǎn)分析
[圖片]
2.2 餓漢式(靜態(tài)代碼塊)
2.1 代碼實(shí)現(xiàn)
/**
- @ClassName SingletonType02
- @Description 餓漢式 -- 靜態(tài)代碼塊
- @Author liu wq
- @Date 2019/10/13 14:00
- @Version 1.0
/
public class SingletonType02 {
/*- 私有化構(gòu)造方法
*/
private SingletonType02() {}
private static SingletonType02 instance;
// 靜態(tài)代碼塊執(zhí)行
static {
instance = new SingletonType02();
}
public static SingletonType02 getInstance() {
return instance;
}
}
- 私有化構(gòu)造方法
2.2 優(yōu)缺點(diǎn)分析
[圖片]
2.3 懶漢式(線程不安全)
2.3.1 代碼實(shí)現(xiàn)
/**
- @ClassName SingletonType02
- @Description 懶漢式-線程不安全
- @Author liu wq
- @Date 2019/10/13 13:47
- @Version 1.0
*/
public class SingletonType03 {
private SingletonType03() {}
private static SingletonType03 instance;
public static SingletonType03 getInstance() {
if (instance == null) {
instance = new SingletonType03();
}
return instance;
}
}
2.3.2 優(yōu)缺點(diǎn)分析
[圖片]
2.4 懶漢式(線程安全,同步方法)
2.4.1 代碼實(shí)現(xiàn)
/**
- @ClassName SingletonType04
- @Description 懶漢式 -- 線程安全茄靠,同步方法
- @Author liu wq
- @Date 2019/10/13 14:04
- @Version 1.0
*/
public class SingletonType04 {
private SingletonType04() {}
private static SingletonType04 instance;
public static synchronized SingletonType04 getInstance() {
if (instance == null) {
instance = new SingletonType04();
}
return instance;
}
}
2.4.2 優(yōu)缺點(diǎn)分析
[圖片]
2.5 略
2.6 雙重檢查
2.6.1 代碼實(shí)現(xiàn)
/**
- @ClassName SingletonType05
- @Description 雙重檢查方法
- @Author liu wq
- @Date 2019/10/13 14:12
- @Version 1.0
*/
public class SingletonType05 {
private SingletonType05() {}
private static volatile SingletonType05 instance;
public static synchronized SingletonType05 getInstance() {
if (instance == null) {
synchronized (SingletonType05.class) {
if (instance == null) {
instance = new SingletonType05();
}
}
}
return instance;
}
}
2.6.2 優(yōu)缺點(diǎn)分析
[圖片]
2.7 靜態(tài)內(nèi)部類
2.7.1 代碼實(shí)現(xiàn)
/**
- @ClassName SingletonType06
- @Description 靜態(tài)內(nèi)部類
- @Author liu wq
- @Date 2019/10/13 14:47
- @Version 1.0
*/
public class SingletonType06 {
private SingletonType06() {}
private static class SingletonInstance {
private static final SingletonType06 INSTANCE = new SingletonType06();
}
public static SingletonType06 getInstance() {
return SingletonInstance.INSTANCE;
}
}
2.7.2 優(yōu)缺點(diǎn)分析
[圖片]
2.8 枚舉
2.8.1 代碼實(shí)現(xiàn)
/**
- @ClassName SingletonType07
- @Description 枚舉實(shí)現(xiàn)單例
- @Author liu wq
- @Date 2019/10/13 16:04
- @Version 1.0
*/
public enum SingletonType07 {
INSTANCE
}
2.8.2 優(yōu)缺點(diǎn)分析
[圖片]
3 注意事項(xiàng)和細(xì)節(jié)說(shuō)明
- 單例模式保證了系統(tǒng)內(nèi)存中該類只存在一個(gè)對(duì)象,節(jié)省了系統(tǒng)資源,對(duì)于一些需要頻繁創(chuàng)建銷毀的對(duì)象,使用單例模式可以提高系統(tǒng)性能
- 當(dāng)想實(shí)例化一個(gè)單例類的時(shí)候,必須要記住使用相應(yīng)的獲取對(duì)象的方法,而不是使用new
- 單例模式使用的場(chǎng)景:需要頻繁的進(jìn)行創(chuàng)建和銷毀的對(duì)象、創(chuàng)建對(duì)象時(shí)耗時(shí)過(guò)多或耗費(fèi)資源過(guò)多(即:重量級(jí)對(duì)象),但又經(jīng)常用到的對(duì)象屡久、工具類對(duì)象忆首、頻繁訪問(wèn)數(shù)據(jù)庫(kù)或文件的對(duì)象(比如數(shù)據(jù)源、session工廠等)