Java設(shè)計(jì)模式中的單例模式
單例模式是一種創(chuàng)建型設(shè)計(jì)模式,其目的是確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問點(diǎn)。
單例模式的兩種不同方式
餓漢式單例模式:
public class SingletonEager {
private static final SingletonEager instance = new SingletonEager();
private SingletonEager() {
// 私有構(gòu)造方法,防止外部實(shí)例化
}
public static SingletonEager getInstance() {
return instance;
}
}
懶漢式單例模式:
public class SingletonLazy {
private static SingletonLazy instance;
private SingletonLazy() {
// 私有構(gòu)造方法,防止外部實(shí)例化
}
public static synchronized SingletonLazy getInstance() {
if (instance == null) {
instance = new SingletonLazy();
}
return instance;
}
}
區(qū)別:
- 餓漢式單例模式(Eager Initialization): 在類加載時(shí)就創(chuàng)建實(shí)例,因此不存在線程安全問題。但是可能會(huì)造成資源浪費(fèi),因?yàn)椴还苁欠袷褂迷搶?shí)例,都會(huì)在類加載時(shí)創(chuàng)建。
-
懶漢式單例模式(Lazy Initialization): 在第一次使用時(shí)才創(chuàng)建實(shí)例,避免了資源浪費(fèi),但需要考慮線程安全問題。上述代碼通過在
getInstance
方法上添加synchronized
關(guān)鍵字來解決線程安全問題,但會(huì)影響性能。
單例模式的具體應(yīng)用場景
單例模式的應(yīng)用場景包括:文章來源:http://www.zghlxwxcb.cn/news/detail-820087.html
- 數(shù)據(jù)庫連接池: 保證多個(gè)線程共享一個(gè)數(shù)據(jù)庫連接池,避免重復(fù)創(chuàng)建連接,提高性能。
- 配置管理器: 保證在整個(gè)應(yīng)用程序中只有一個(gè)配置管理器,確保配置信息的一致性。
- 日志管理器: 保證在整個(gè)應(yīng)用程序中只有一個(gè)日志管理器,確保日志的一致性。
舉例說明:文章來源地址http://www.zghlxwxcb.cn/news/detail-820087.html
public class DatabaseConnectionPool {
private static final DatabaseConnectionPool instance = new DatabaseConnectionPool();
private DatabaseConnectionPool() {
// 私有構(gòu)造方法,防止外部實(shí)例化
}
public static DatabaseConnectionPool getInstance() {
return instance;
}
// 其他數(shù)據(jù)庫連接池相關(guān)方法...
}
單例模式的優(yōu)點(diǎn)
- 全局唯一實(shí)例: 確保一個(gè)類只有一個(gè)實(shí)例,方便對該實(shí)例的管理和控制。
- 延遲加載: 懶漢式單例模式可以在需要時(shí)才創(chuàng)建實(shí)例,避免了資源浪費(fèi)。
- 線程安全(部分實(shí)現(xiàn)): 餓漢式單例模式在類加載時(shí)就創(chuàng)建實(shí)例,不存在線程安全問題;懶漢式單例模式通過加鎖等機(jī)制可以保證在多線程環(huán)境下的安全訪問。
- 提供全局訪問點(diǎn): 全局訪問點(diǎn)使得程序可以方便地訪問單例對象,統(tǒng)一管理資源或狀態(tài)。
到了這里,關(guān)于Java設(shè)計(jì)模式中的單例模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!