所謂類的單例設計模式,就是採取一定的方法保證整個軟體系統中,對某個類只能存在乙個物件例項,並且該類只提供乙個取得其物件例項的方法(靜態方法)
/**
* 餓漢式(靜態變數)
* 1. 優點: 寫法簡單,就是在類裝載的時候完成例項化。避免了執行緒同步問題
* 2. 缺點:
* (1) 在類裝載的時候完成例項化,沒有達到 lazy loading 的效果。如果從未使用過這個例項,則會造成記憶體浪費
* (2) 這種方法基於 classloader 機制避免了多執行緒的同步問題,不過,instance在類裝載時就例項化,在單例模式中大多數都是呼叫
* getinstance()方法。但是導致類裝載的原因有很多種,因此不能確定有其他方式(或者其他的靜態方法)導致類裝載,這時候初始化 instance
* 就沒有達到 lazy loading 的效果
* */
class singleton01
// 2. 本類內部建立物件例項
private final static singleton01 instance = new singleton01() ;
// 3. 提供乙個公有的靜態方法,返回例項物件
public static singleton01 getinstance()
}
/**
* 餓漢式(靜態**塊)
*/class singleton02
// 2. 本類內部建立物件例項
private final static singleton02 instance ;
static
// 3. 提供乙個公有的靜態方法,返回例項物件
public static singleton02 getinstance()
}
/**
* 起到了lazy loading 的效果,但是只能在單執行緒下使用
* 在多執行緒下,該方式不安全,同步效率太低了
* 開發中,不推薦使用
*/class singleton03
// 提供乙個靜態的公有方法,當使用該方法是=時,才會去建立instance
// 即懶漢式
public static singleton03 getinstance()
return instance ;
}}
/**
* 懶漢式(執行緒安全,同步方法)
* 開發中,不推薦使用
*/class singleton04
// 提供乙個靜態的公有方法,當使用該方法是=時,才會去建立instance
// 即懶漢式
public static synchronized singleton04 getinstance()
return instance ;
}}
/**
* 懶漢式(執行緒安全,同步方法)
* 開發中,不推薦使用
*/class singleton05
// 提供乙個靜態的公有方法,當使用該方法是=時,才會去建立instance
// 即懶漢式
public static singleton05 getinstance()
}return instance ;
}}
/**
* 雙重檢查
* 提供了乙個靜態的公有方法,加入雙重檢查**,解決執行緒安全問題,同時解決家在問題
* 同時保證效率,推薦使用
* 優點:
* 1. double-check概念是多執行緒開發中常使用到的,如**中,我們進行了兩次 if 的校驗,可以保證執行緒安全
* 2. 例項化**只用執行一次,後面再次訪問時,判斷 if (null == instance) , 直接 return 例項化物件,也避免了反覆進行方法同步
* 3. 執行緒安全,延遲載入,效率高
*/class singleton06
// 提供乙個靜態的公有方法,當使用該方法是=時,才會去建立instance
// 即懶漢式
public static singleton06 getinstance()}}
return instance ;
}}
/**
* 1. 採用了類載入的機制料保護初始化例項只有乙個執行緒
* 2. 靜態內部類方法在類載入的時候不會立即唄例項化,而是在需要例項化的時候,呼叫 getinstance()方法,才會在裝載singleinstance類,從而完成例項化
* 3. 類的靜態屬性只會在第一次載入類的時候初始化,所以在這裡, jvm幫助我們保證了執行緒的安全性,在類進行初始化的時候,別的執行緒是無法進入的
* 4. 優點: 避免了執行緒不安全,利用靜態內部類特點實現延遲載入,效率高
* 5. 推薦使用
*/class singleton07
// 寫乙個靜態內部類,該類中有乙個靜態屬性 singleton07
private static class singleinstance
// 提供乙個靜態的公有方法,直接返回例項
public static synchronized singleton07 getinstance()
}
/**
* 推薦使用
*/enum singleton08
}
設計模式4 單例模式
保證乙個類僅有乙個例項,並提供乙個訪問他的全域性訪問點。所有類都有構造方法,假如不對他進行編碼,系統會生成空的public 的構造方法,外部類就能建立這個類的物件。為了不讓其他類能new出這個類的例項,所以需要寫乙個private 的構造方法 其實即使使用private修飾,通過反射機制還是能在外部...
設計模式 4 單例模式
單例模式屬於建立型的設計模式,其特點是在於保證乙個類只會被例項化一次,可以作為全域性唯一資源提供給系統。此處通過判斷兩個例項的位址是否一致來驗證單例模式,中包含了保證多執行緒安全的單例模式實現。由於python下的懶漢單例模式實現本人覺得是不可能的,因此下面使用了double check的方式實現了...
設計模式 4 單例模式
單例模式用來確保乙個類只有乙個例項,並提供乙個全域性訪問點。在所有的設計模式中,單例模式是最簡單也是最常用的一種設計模式,它只為乙個例項提供乙個全域性物件,內次嘗試去獲取乙個類的例項的時候,保證獲取到的都是這乙個物件。下面是關於單例模式中的一些小概念 餓漢式和懶漢式區別 餓漢就是類一旦載入,就把單例...