單例模式(Singleton Pattern)是 Java 中最簡單的設計模式之一
應用場合: 有些對象只需有一個的場景, 例如, 訪問文件
作用: 保證整個應用程序中某個實例有且只有一個
類型:分為餓漢模式和懶漢模式
這是我們平時經(jīng)常使用的class類
public class Singleon{
}
在使用這個class類的時候眶拉, 通常直接new
public class startActivity{
//通過默認的構造參數(shù),我們可以創(chuàng)建多個實例
new Singleon();
new Singleon();
}
現(xiàn)在我們需要實現(xiàn)只創(chuàng)建一個實例
餓漢模式
為了安全,控制訪問躯泰,static前的修飾符還是需要寫私有的
如下就是我們一個最簡單的餓漢模式的寫法
為什么叫餓漢模式呢谋减?
這就和這行代碼的加載順序有關了private static Singleton instace=new Singleton();
static靜態(tài)成員屬于類所有,當類加載時腔呜,就會去創(chuàng)建一個Singleton的實例, 不管用戶是否去調(diào)用獲取再悼,該實例都已經(jīng)加載
因為該實例迫不及待的就加載出來了核畴, 所以稱之為餓漢模式(早早的吃飽飽)
public class Singleton{
//1.修改默認的構造方法,不允許外部直接創(chuàng)建對象
private Singleton(){
}
//2.創(chuàng)建類的唯一實例
private static Singleton instace=new Singleton();
//3.提供一個用于獲取實例的方法
public Singleton getInstace(){
return instance;
}
}
懶漢模式
不推薦如下寫法,懶漢模式線程不安全冲九,解決辦法谤草,看文章雙重鎖
http://www.reibang.com/p/5636d9123e65
public class Singleton{
//1.修改默認的構造方法,不允許外部直接創(chuàng)建對象
private Singleton(){
}
//2.聲明類的唯一實例,使用private static修飾
private static Singleton instance;
//3.提供一個用于獲取實例的方法
public Singleton getInstace(){
//當外部類調(diào)用的時候再創(chuàng)建該實例
if(null==instance){
instance=new Singleton()莺奸;
}
return instance;
}
}
餓漢模式丑孩,懶漢模式區(qū)別
名稱 | 區(qū)別 | 是否線程安全 |
---|---|---|
餓漢模式 | 加載類時比較慢,運行時獲取對象的速度比較快 | 線程安全 |
懶漢模式 | 加載類時比較快灭贷,運行時獲取對象的速度比較慢 | 線程不安全 |