week6(Sunday)
單例設計模式
1、什麼是設計模式?
設計模式:是一套反覆使用、多數人知曉的經過分類、編目的代碼分佈經驗的總結設計模式是軟件開發人員在軟件開發過程中一般問題的解決方案。
Java常見設計模式有23種,可分爲三類:
一、創建性 二、結構型 三、行爲型
2、單例設計模式--(懶漢式、餓漢式)
目的:使得類的一個對象成爲該類系統中的唯一一個實例,自行實例化並向整個系統提供這個實例實現步驟: 1、只提供私有的構造方法(防止外部創建對象)
2、只提供一個靜態的私有對象
3、提供一個公有的方法用來創建獲取靜態的私有對象
-------2.1 餓漢式
創建對象實例時直接初始化,用空間換時間(能保證線程安全)//餓漢式
public class Singleton {
//1、只提供私有的構造方法
private Singleton(){
}
//2、只提供靜態的私有對象並完成初始化
private static Singleton singleton = new Singleton();
//3、提供一個公有的方法用來創建獲取靜態的私有變量
public static Singleton getSingleton(){
return singleton;//返回該唯一對象
}
}
-------2.2 懶漢式
等到需要使用對象時再創建對象,用時間換空間(線程不安全)//懶漢式
public class Singleton2 {
//1、只提供私有的構造方法
private Singleton2(){
}
//2、只提供一個靜態的私有對象,不初始化對象
private static Singleton2 singleton2;
//3、提供一個公有的方法用來創建獲取靜態的私有對象
public static Singleton2 getSingleton2(){
if(singleton2 == null){
singleton2 = new Singleton2();//創建對象
}
return singleton2;
}
}
-------2.3 單例模式設計調用方法
//單例設計模式類使用方法
public class SingletonTest {
public static void main(String[] args) {
//餓漢式
Singleton singletonOne = Singleton.getSingleton();
Singleton singletonTwo = Singleton.getSingleton();
//懶漢式
Singleton2 singleton2One = Singleton2.getSingleton2();
Singleton2 singleton2Two = Singleton2.getSingleton2();
}
}
3、單例設計模式(餓漢式與懶漢式)總結
優點: 1、在內存中只有一個對象,節省空間2、避免頻繁創建銷燬對象,提高性能
3、避免對共享資源的多重佔用
缺點: 1、擴展比較困難
2、若實例化長期不利用,系統會自動進行垃圾回收,造成對象狀態丟失
使用場景: 1、創建對象時佔用資源過多,但同時又要用到該類對象
2、對系統內資源要統一讀寫,如讀寫配置信息
3、當多個實例存在可能引起程序邏輯錯誤,如號碼生成器