3.內部類實現
4.註冊登記式
5.列舉式
6.使用cas來實現
7.解決反序列化單例問題解決
單例模式
初衷是為了使資源共享,只需要賦值或者初始化一次,大家都能重複利用
應用場景:listener本身單例,日曆calendar,ioc容器,配置資訊config(除了差異性的)
技術方案:保證整個執行過程中只有乙份,
餓漢式、懶漢式、註冊登記式(列舉式)、反序列如何保證單例
1.餓漢式
特點:
public
class
hungry
private
static
final hungry hugry =
newhungry()
;public
static hungry getinstance()
}
2.懶漢式
特點:延遲載入
2.1 (執行緒非安全)
public
class
lazy
private
static lazy lazy;
public
static lazy getinstance()
return hugry;
}}
2.2 (執行緒安全)public
class
lazytwo
private
static lazytwo lazy;
public
static
synchronized lazytwo getinstance()
return lazy;
}}
或者 //雙重校驗式,稍微增加點效率
public
class
lazytwo
public
static lazytwo getsingleton()
}}return singleton;
}}
3.內部類實現
特點:
利用了外部類被呼叫的時候內部類才會被載入
內部類一定是要在方法呼叫之前初始化
兼顧了:懶漢式的延遲載入以及synchronized的安全問題
public
class
lazythree
else}}
//static 使單例空間共享
//final保證方法不會被重寫,過載
public
static
final lazythree getinstance()
//預設不載入
private
static
class
lazyholder
}
4.註冊登記式
這個是spring中使用的方式,這裡簡單的使用下
public
class
beanfactory
//利用concurrenthashmap的鎖
private
static map
ioc =
newconcurrenthashmap
<
>()
;public
static
synchronized object getbean
(string classname)
else
}}
5.列舉式public
enum season
,summer;
}
6.使用cas來實現public
class
singleton
public
static singleton getinstance()
singleton =
newsingleton()
;if(instance.
compareandset
(null, singleton))}
}}
7.解決反序列化單例問題解決
有時候反序列化 也會多new乙個物件。
參考:
public
class
seriable
implements
serializable
public
final
static seriable instance =
newseriable()
;public
static seriable getinstance()
//新增這個hook函式,那麼系統在反序列化的過程中就會通過該hook方法得到原有的單例
//而不是重新建立乙個單例。
private object readresolver()
}
這個只是一些筆記,反序列化和登記式只是乙個方案,需要自己優化** 設計模式之單例模式
前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...
設計模式之單例模式
package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...
設計模式之 單例模式
單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...