任何情況下只有乙個例項,提供全域性乙個訪問點。
餓漢式單例:
在初始話的時候直接new出來了,不需要在呼叫的時候去new,這樣就避免了執行緒安全的問題。優點:1.執行緒絕對安全。2.執行效率高。在類載入的時候就初始化了。
缺點:1.浪費型別空間,占用記憶體。佔著空間,浪費資源。
public
class
hungry
private
static
final hungry hungry =
newhungry()
;public
static hungry getinstance()
}
懶漢式:
在需要的時候才會去建立。
優點:1.占用空間小
缺點:1.需要自己解決執行緒安全問題。
特點:在外部類被呼叫的時候內部類才會被載入內部類一定是要在方法呼叫之前初始化巧妙地避免了執行緒安全問題
這種形式兼顧餓漢式的記憶體浪費,也兼顧synchronized效能問題,完美地遮蔽了這兩個缺點。
史上最牛b的單例模式的實現方式
public
class
lazyone
public
static lazyone getinstance()
return lazyone;}}
public
class
lazytwo
public
static
synchronized lazytwo getinstance()
return lazytwo;}}
public
class
lazythree
public
static lazythree getinstance()
}}return lazythree;}}
public
class
lazyfour
}public
static lazytwo getinstance()
private
static
class
lazyhandle
}
註冊試:
public
class
reginstersingle
public reginstersingle getinstance
(string name)
if(registermap.
get(name)
==null)
return
(reginstersingle)registermap.
get(name);}
}//列舉式
public
enum regiterenum
}
序列化和反序列化:
把物件轉換為位元組序列的過程稱為物件的序列化。
把位元組序列恢復為物件的過程稱為物件的反序列化。
物件的序列化主要有兩種用途:
把物件的位元組序列永久地儲存到硬碟上,通常存放在乙個檔案中。
在網路上傳送物件的位元組序列;
實現readresolve方法可以防止反序列化。
設計模式 二 單例模式
建立乙個物件並不難,但當我們不得不為每新新增一種抽象類或介面而到處修改客戶 時,就不得不思考直接使用new建立物件帶來的高耦合。建立型別的模式將使用物件和 例項化物件 進行了分離。建立型別模式包括 單例模式 工廠方法模式 原型模式。下面先看單例模式 單例模式 保證乙個類在系統裡只有乙個例項化物件。應...
設計模式(二) 單例模式
單例模式 用來建立只能有乙個例項的物件。確保乙個類只有乙個例項,並提供乙個全域性訪問點。有的時候我們不希望乙個類被建立出多個物件,因為多個例項會帶來許多不好的影響。經典單例模式 public class singleinstance public static singleinstance geti...
設計模式(二)單例模式
單例模式 保證只有乙個物件,每次獲取物件獲取到的都是同乙個物件。單例模式是我們程式中最常見的設計模式,很多任務具類都設計成單例模式,spring中的bean也有單例,單他不是真正的單例。單例模式總結下來有幾種寫法,他們共性就是私有的構造方法。package com.designpattern.sin...