Java設計模式之單例模式簡析
什么是單例模式?
單例模式是常用的設計模式,在我們的系統(tǒng)乃至在框架中都普遍被用到,單例模式就是使一個類有且只有一個實例用于外部訪問,這樣大大的節(jié)省了系統(tǒng)的資源,而單例模式需要注意的也就以下三點:
- 保證這個類有且只有一個實例
- 自行創(chuàng)建這個實例
- 提供這個實例供外部訪問
代碼實現(xiàn)需要注意的就是
- 單例模式的類構造方法私有化
- 這個類的定義中包含自己的一個靜態(tài)實例對象
- 提供一個共有靜態(tài)方法供外部調(diào)用
三種實現(xiàn)方式
1、懶漢式
懶漢式與延遲初始化有些相似,就是沒人用的時候我不實例化出來,有人需要調(diào)用了我再實例化出來,JAVA代碼實現(xiàn)如下
public class SingletonClz{
//實例
private static SingletonClz instance = null;
//私有構造
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();
//私有構造
private SingletonClz(){}
//外部調(diào)用方法
public static getInstance()
{
return instance;
}
}3、加鎖的單例模式
public class SingletonClz{
//實例
private static SingletonClz instance = null;
//私有構造
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不等于空了,就不會再去實例化了。
到此這篇關于Java設計模式之單例模式簡析的文章就介紹到這了,更多相關Java單例模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springmvc4+hibernate4分頁查詢功能實現(xiàn)
本篇文章主要介紹了springmvc4+hibernate4分頁查詢功能實現(xiàn),Springmvc+hibernate成為現(xiàn)在很多人用的框架整合,有興趣的可以了解一下。2017-01-01
Java 數(shù)據(jù)類型及類型轉(zhuǎn)換的互相轉(zhuǎn)換實例代碼
這篇文章主要介紹了Java 數(shù)據(jù)類型及類型轉(zhuǎn)換的互相轉(zhuǎn)換實例代碼,需要的朋友可以參考下2020-10-10

