ensure a class has only one instance, and provide a global point of access to it.(確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項)
建立方式分為餓漢式、懶漢式、雙重檢查、靜態內部類、列舉等。
靜態屬性建立
/**
* 採用餓漢式建立單例
* 使用靜態屬性,如果建立後不使用,會有記憶體浪費
*/class
singleton
public
static singleton getinstance()
}
靜態**塊建立
/**
* 使用餓漢式建立單例物件
* 採用靜態**塊實現
*/class
singleton
private
singleton()
public
static singleton getinstance()
}
**示例
/**
* 使用懶漢式建立單例物件,會出現執行緒併發問題,不推薦使用
*/class
singleton
public
static singleton getinstance()
return instance;
}}
在1的基礎上優化如下
/**
* 使用懶漢式建立單例物件
* 解決了執行緒併發問題,但效率低
*/class
singleton
public
static
synchronized singleton getinstance()
return instance;
}}
在2的基礎上提公升效率
/**
* 懶漢式建立單例,執行緒安全,推薦使用
* volatile作用:
* 1) 多執行緒間的資料可見性
* 2) 防止指令重排
* 如果不加volatile,可能會得到乙個半初始化的物件(當然這種情況比較少見)
*/class
singleton
catch
(exception e)
}public
static singleton getinstance()
}}return instance;
}}
**示例
/**
* 靜態內部類實現單例,執行緒安全,推薦使用
*/class
singleton
private
static
class
singletoninstance
public
static singleton getinstance()
}
public
class
singletontest
service.
shutdown()
;}}
**示例
/**
* 列舉實現單例,執行緒安全,推薦使用
*/enum singleton
// 測試類
public
class
singletontest
service.
shutdown()
;}}
設計模式 單例模式的幾種實現方式
1.概述 單例模式 簡單的說就是可以確保只產生乙個類例項,讓多個使用者或者多個執行緒同時使用這乙個例項,而不需要每次使用都建立一次物件。2.優缺點和適用場景 3.幾種不同形式的單例模式 class singleclass public static singleclass getinstance 這...
設計模式 單例模式(一)單例的幾種基本實現方式
單例模式餓漢式單例 public class hungrysingleton public static hungrysingleton getinstance 也可以將例項初始化的過程放在靜態 塊中。這兩種寫法都非常的簡單,也非常好理解,餓漢式適用在單例物件較少的情況。懶漢式單例 懶漢式單例的特點...
單例模式的幾種方式
學習設計模式有一段時間了,今天恰好用到了單例,而且單例模式比較常用,面試常考,比較重要。為了方便我不再一步一步詳細的解釋,下面只是給出幾種常用的用法 public class singleton public static singleton getinstance public class sin...