單例模式介紹:
? ? ? 單例模式(Singleton Pattern)是設計模式中最簡單且最常用的一種創(chuàng)建型模式,其目的是保證一個類在整個系統(tǒng)中只存在一個實例,并提供全局訪問點來獲取這個唯一實例。這種模式主要適用于那些需要頻繁實例化然后又希望避免因為多次實例化而消耗過多資源或產生副作用的情況。
單例模式的實現步聚:
? ? 1 私有化構造函數:
? ? ? 將構造函數聲明為private,確保只有類自身可以調用它,外部不可以實例化對象。
public class Singleton {
private Singleton() {}
}
? 2 靜態(tài)成員變量存儲單個實例:
? ? 創(chuàng)建一個私有的靜態(tài)變量來持有唯一的實例對象。
private static volatile Singleton instance;
3 公有靜態(tài)方法獲取實例:
? ?寫一個公共的靜態(tài)方法,返回已創(chuàng)建的單例實例。
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
上面是線程安全的懶漢式單例,另外還有飽漢式單例,初始化時就創(chuàng)建實例,代碼如下:文章來源:http://www.zghlxwxcb.cn/news/detail-796482.html
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
?文章來源地址http://www.zghlxwxcb.cn/news/detail-796482.html
單例實現需要考慮以下幾點:
- 線程安全性:多線程環(huán)境下,單例的初始化只會發(fā)生一次。
- 序列化與反序列化問題:若單例類實現了Serializable接口,需要防止通過反序列化生成新的實例,可通過添加readResolve()方法解決。
- 反射攻擊:可以通過反射破壞單例模式,增加加檢查機制阻止非正常創(chuàng)建實例。
到了這里,關于設計模式-單例模式的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!