Java設(shè)計模式之單例模式簡析
什么是單例模式?
單例模式是常用的設(shè)計模式,在我們的系統(tǒng)乃至在框架中都普遍被用到,單例模式就是使一個類有且只有一個實例用于外部訪問,這樣大大的節(jié)省了系統(tǒng)的資源,而單例模式需要注意的也就以下三點:
- 保證這個類有且只有一個實例
- 自行創(chuàng)建這個實例
- 提供這個實例供外部訪問
代碼實現(xiàn)需要注意的就是
- 單例模式的類構(gòu)造方法私有化
- 這個類的定義中包含自己的一個靜態(tài)實例對象
- 提供一個共有靜態(tài)方法供外部調(diào)用
三種實現(xiàn)方式
1、懶漢式
懶漢式與延遲初始化有些相似,就是沒人用的時候我不實例化出來,有人需要調(diào)用了我再實例化出來,JAVA代碼實現(xiàn)如下
public class SingletonClz{
//實例
private static SingletonClz instance = null;
//私有構(gòu)造
private SingletonClz(){}
//外部調(diào)用方法
public static getInstance()
{
if(null == instance)
{
instance = new SingletonClz();
return instance;
}
else
{
return instance;
}
}
}2、餓漢式
先實例化出來,有人用就直接返回即可
public class SingletonClz{
//實例
private final static SingletonClz INSTANCE = new SingletonClz();
//私有構(gòu)造
private SingletonClz(){}
//外部調(diào)用方法
public static getInstance()
{
return instance;
}
}3、加鎖的單例模式
public class SingletonClz{
//實例
private static SingletonClz instance = null;
//私有構(gòu)造
private SingletonClz(){}
//外部調(diào)用方法
public static getInstance()
{
synchronized(SingletonClz.class)
{
if(null == instance)
{
instance = new SingletonClz();
}
}
return instance;
}
}這里加一個重量級的鎖是為了防止并發(fā)的情況下兩個線程同時訪問這個方法同時發(fā)現(xiàn)instace為null,就都跑去實例化這個對象了。
加了一個synchronized鎖就防止了這一情況的發(fā)生,當有一個線程拿到了鎖,另一個就阻塞在外面知道鎖的釋放,當線程A實例化完成并釋放鎖后,B進來發(fā)現(xiàn)instace不等于空了,就不會再去實例化了。
到此這篇關(guān)于Java設(shè)計模式之單例模式簡析的文章就介紹到這了,更多相關(guān)Java單例模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中StringBuilder字符串類型的操作方法及API整理
Java中的StringBuffer類繼承于AbstractStringBuilder,用來創(chuàng)建非線程安全的字符串類型對象,下面即是對Java中StringBuilder字符串類型的操作方法及API整理2016-05-05
Spring Security使用多種加密方式進行密碼校驗的代碼示例
在Web應用中,密碼的安全存儲和驗證是至關(guān)重要的,本文將通過一個具體的代碼示例,介紹和總結(jié)如何在Spring Security中使用多種加密方式進行密碼校驗,文中通過代碼講解得非常詳細,需要的朋友可以參考下2024-06-06
Java修改eclipse中web項目的server部署路徑問題
這篇文章主要介紹了Java修改eclipse中web項目的server部署路徑,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11
SpringBoot整合mybatis/mybatis-plus實現(xiàn)數(shù)據(jù)持久化的操作
這篇文章主要介紹了SpringBoot整合mybatis/mybatis-plus實現(xiàn)數(shù)據(jù)持久化,本節(jié)內(nèi)容我們介紹了數(shù)據(jù)持久化的相關(guān)操作,并且是基礎(chǔ)傳統(tǒng)的關(guān)系型數(shù)據(jù)庫——mysql,需要的朋友可以參考下2022-10-10

