最近複習了下單例模式寫法,記錄下來,分析每種優缺點
其中標紅的是推薦方式,有雙重檢查模式,還有列舉模式
* 優點:編寫簡單 不存在併發問題 多個執行緒建立多個例項
* 缺點:一開始就載入,浪費資源.
/**
* @author: xuxu
* @date 2020/2/2 16:08
* @description: 第一種單例模式寫法
* 餓漢式 靜態變數方式(可用)
* 優點:編寫簡單 不存在併發問題 多個執行緒建立多個例項
* 缺點:一開始就載入,浪費資源.
*/public class singleton01 ;
public static singleton01 instance()
//測試
public static void main(string args)
}
優點缺點和第一種類似 只是寫法不同
/**
* @author: xuxu
* @date 2020/2/2 16:12
* @description: 第二種單例模式建立方式
* 餓漢式 靜態塊模式(可用)
* 優點缺點和第一種類似 只是寫法不同
*/public class singleton02
private singleton02 ()
public static singleton02 instance()
public static void main(string args)
}
* 優點:懶載入,節省記憶體 使用時才例項化
/*** @author: xuxu
* @date 2020/2/2 16:16
* @description:
* * 第三種方式
* 懶漢式 (不可用)
* 優點:懶載入,節省記憶體 使用時才例項化
*/public class singleton03 ;
public static singleton03 instance()
return instance;
}}
* 優點:懶載入,用synchronized關鍵字修飾 避免執行緒安全問題
* 缺點:每次呼叫該方式獲取例項都會加鎖,效能上有影響
/**
* @author: xuxu
* @date 2020/2/2 16:20
* @description:
* 第4種建立方式 懶漢式 同步鎖(可用)
* 優點:懶載入,用synchronized關鍵字修飾 避免執行緒安全問題
* 缺點:每次呼叫該方式獲取例項都會加鎖,效能上有影響
*/public class singleton04 ;
public static synchronized singleton04 instance()
return instance;
}}
* 優點:懶載入,每次呼叫該方式獲取例項前先判斷是否例項已經存在,不存在才加鎖
* 缺點:雖然建立時加了鎖,但是前面的判斷同樣存在併發問題 比如兩個執行緒都通過了判斷.然後再獲取鎖
/**
* @author: xuxu
* @date 2020/2/2 16:20
* @description:
* 第5種建立方式 懶漢式 同步鎖(不可用)
* 優點:懶載入,每次呼叫該方式獲取例項前先判斷是否例項已經存在,不存在才加鎖
* 缺點:雖然建立時加了鎖,但是前面的判斷同樣存在併發問題 比如兩個執行緒都通過了判斷.然後再獲取鎖
*/public class singleton05 ;
public static singleton05 instance()
}return instance;
}}
* 缺點:編寫**複雜,volatile容易遺漏
/**
* @author: xuxu
* @date 2020/2/2 16:20
* @description:
* 第6種建立方式 懶漢式 雙重檢查模式 (面試時推薦用)
* 缺點:編寫**複雜,volatile容易遺漏
*/public class singleton06 ;
public static singleton06 instance()}}
return instance;
}}
/**
* @author: xuxu
* @date 2020/2/2 16:20
* @description:
* 第7種建立方式 靜態內部類方式(可用)
* 內部類的特點:
* 1.只能在內部類中定義靜態類
* 2.靜態內部類與外層類繫結,即使沒有建立外層類的物件,它一樣存在。
* 3.靜態類的方法可以是靜態的方法也可以是非靜態的方法,靜態的方法可以在外層通過靜態類呼叫,而非靜態的方法必須要建立類的物件之後才能呼叫。
* 5.只能引用外部類的static成員變數(也就是類變數)。
* 6.如果乙個內部類不是被定義成靜態內部類,那麼在定義成員變數或者成員方法的時候,是不能夠被定義成靜態的。
* 優點:
* 缺點:
*/public class singleton07 ;
private static class innersingleton
public static singleton07 instance()
public static void main(string args)
}
* 優點:
* 我們定義的乙個列舉,在第一次被真正用到的時候,會被虛擬機器載入並初始化,而這個初始化過程是執行緒安全的
* 1.**簡潔
* 2.可以防止反射破壞單例模式
* 3.執行緒安全
/**
* @author: xuxu
* @date 2020/2/2 17:43
* @description: 列舉(最好的方法)
* 優點:
* 我們定義的乙個列舉,在第一次被真正用到的時候,會被虛擬機器載入並初始化,而這個初始化過程是執行緒安全的
* 1.**簡潔
* 2.可以防止反射破壞單例模式
* 3.執行緒安全
*/public enum singleton08
public static void main(string args)
}
模式 單例模式8種寫法
單例模式是最常用到的設計模式之一,熟悉設計模式的朋友對單例模式都不會陌生。一般介紹單例模式的書籍都會提到餓漢式和懶漢式這兩種實現方式。但是除了這兩種方式,本文還會介紹其他幾種實現單例的方式,讓我們來一起看看吧。單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許乙個例項存在。許多時候整個系...
單例模式的8種寫法
個人部落格 小景哥哥 單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許乙個例項存在。許多時候整個系統只需要擁有乙個的全域性物件,這樣有利於我們協調系統整體的行為。比如在某個伺服器程式中,該伺服器的配置資訊存放在乙個檔案中,這些配置資料由乙個單例物件統一讀取,然後服務程序中的其他物件再通...
單例的8種寫法
單例模式是最常用到的設計模式之一,熟悉設計模式的朋友對單例模式都不會陌生。一般介紹單例模式的書籍都會提到 餓漢式 和 懶漢式 這兩種實現方式。但是除了這兩種方式,還有其他幾種實現單例的方式。簡介單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許乙個例項存在。許多時候整個系統只需要擁有乙個...