ios單例模式優(yōu)缺點(diǎn) 單例模式和全局靜態(tài)變量的區(qū)別?
單例模式和全局靜態(tài)變量的區(qū)別?1. 單例特性:確保只有一個(gè)類的唯一實(shí)例存在。類本身初始化自己。獲取唯一實(shí)例的方法非常清楚??梢酝ㄟ^(guò)類本身定義的靜態(tài)方法getInstance()獲取類的唯一實(shí)例引用。2
單例模式和全局靜態(tài)變量的區(qū)別?
1. 單例特性:確保只有一個(gè)類的唯一實(shí)例存在。類本身初始化自己。獲取唯一實(shí)例的方法非常清楚??梢酝ㄟ^(guò)類本身定義的靜態(tài)方法getInstance()獲取類的唯一實(shí)例引用。2靜態(tài)變量定義類的實(shí)例引用特性:類實(shí)例引用的靜態(tài)變量可以在任何文檔類中定義。獲取類實(shí)例引用的靜態(tài)變量。您可以定義靜態(tài)變量的類名,并通過(guò)點(diǎn)語(yǔ)法訪問引用。靜態(tài)變量可以在任何位置重新賦值。Singleton模式是對(duì)靜態(tài)變量方法造成的缺陷的改進(jìn),創(chuàng)建一個(gè)類實(shí)例引用
在Singleton中,lazy和hungry的本質(zhì)區(qū)別如下:
1。饑餓模式是線程安全的。已經(jīng)為系統(tǒng)創(chuàng)建了一個(gè)靜態(tài)對(duì)象,以便在創(chuàng)建類時(shí)使用,以后不會(huì)更改。Lazy如果實(shí)例對(duì)象是在沒有同步的情況下創(chuàng)建的,那么對(duì)該對(duì)象的訪問就不是線程安全的。
2. 在實(shí)現(xiàn)方面,它們之間最大的區(qū)別是延遲加載。它在需要時(shí)創(chuàng)建對(duì)象,而饑餓模式是在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建的。饑餓模式不需要注意多線程。書寫方法簡(jiǎn)單明了,可以使用。但是當(dāng)類被加載時(shí),它會(huì)創(chuàng)建一個(gè)實(shí)例。因此,如果是工廠模式,緩存了很多實(shí)例,就要考慮效率,因?yàn)橐坏┘虞d了類,不管是否使用,都會(huì)創(chuàng)建所有實(shí)例。
3. 建立單一目標(biāo)的時(shí)間不同?!發(fā)azy類型”是在您真正使用它時(shí)創(chuàng)建這個(gè)單例對(duì)象,而“hungry類型”是在開始時(shí)創(chuàng)建這個(gè)單例對(duì)象,不管您是否需要它。singleton模式的優(yōu)點(diǎn)是:(1)實(shí)例控制:singleton模式防止其他對(duì)象實(shí)例化自己的singleton對(duì)象副本,從而確保所有對(duì)象訪問唯一的實(shí)例。(2) 靈活性:因?yàn)轭惪刂茖?shí)例化過(guò)程,所以類可以靈活地更改實(shí)例化過(guò)程。2singleton模式的缺點(diǎn)是:(1)開銷:雖然數(shù)量很少,但是如果每次對(duì)象請(qǐng)求引用時(shí)都需要檢查類的實(shí)例是否存在,那么仍然需要一些開銷。您可以通過(guò)使用靜態(tài)初始化來(lái)解決這個(gè)問題。(2) 可能的開發(fā)混亂:當(dāng)使用單例對(duì)象(尤其是類庫(kù)中定義的對(duì)象)時(shí),開發(fā)人員必須記住他們不能用new關(guān)鍵字實(shí)例化對(duì)象。由于庫(kù)的源代碼可能無(wú)法訪問,應(yīng)用程序開發(fā)人員可能會(huì)意外地發(fā)現(xiàn)自己無(wú)法直接實(shí)例化此類。
單例模式中,餓漢式和懶漢式的區(qū)別?為什么推薦說(shuō),用餓漢模式?
單例模式也是一種常見的設(shè)計(jì)模式。它能給我們帶來(lái)什么好處?實(shí)際上,它有三個(gè)功能:一是控制資源的使用,通過(guò)線程同步控制資源的并發(fā)訪問;二是控制實(shí)例數(shù),達(dá)到節(jié)約資源的目的。第三,作為一種通信媒介,即數(shù)據(jù)共享,它可以在不建立直接關(guān)聯(lián)的情況下實(shí)現(xiàn)多個(gè)無(wú)關(guān)線程或進(jìn)程之間的通信。例如,數(shù)據(jù)庫(kù)連接池的設(shè)計(jì)一般采用單例模式。數(shù)據(jù)庫(kù)連接是數(shù)據(jù)庫(kù)資源
單例模式,即一個(gè)類只能有一個(gè)實(shí)例。無(wú)論何時(shí),誰(shuí)請(qǐng)求,都是同一個(gè)實(shí)例。
單例模式,每種語(yǔ)言都有自己的實(shí)現(xiàn)方式,這里我以Java為例。實(shí)現(xiàn)單例的方法有很多。如果您想要最簡(jiǎn)單和最完美的實(shí)現(xiàn),請(qǐng)參閱以下代碼。這是我?guī)滋烨敖o朋友解釋辛格爾頓時(shí)寫的。
Java collection framework的作者Joshua Bloch在《有效的Java》一書中推薦了這種寫作方式枚舉型的單元素已成為實(shí)現(xiàn)“單例”的最佳途徑。
看起來(lái)不簡(jiǎn)單嗎?單例枚舉非常簡(jiǎn)單,可以保證多線程并發(fā)訪問的安全性,防止序列化和反射。