Filter過濾器的作用
阿新 • • 發佈:2021-01-05
設計模式之單例模式
單例模式:某個類只能有一個例項,提供一個全域性的訪問點
單例模式具有的3個特點:
- 只有一個例項
- 自我例項化
- 提供全域性訪問點
單例模式的優缺點
優點:節約系統資源、提高了系統效率,同時也能夠嚴格控制客戶對它的訪問。
缺點:也許就是因為系統中只有一個例項,這樣就導致了單例類的職責過重,違背了“單一職責原則”,同時也沒有抽象類,所以擴充套件起來有一定的困難。
單例模式的運用場景
對於 Java 來說,單例模式可以保證在一個 JVM 中只存在單一例項。單例模式的應用場景主要有以下幾個方面。
- 需要頻繁建立的一些類,使用單例可以降低系統的記憶體壓力,減少 GC。
- 某個類只要求生成一個物件的時候
- 某類需要頻繁例項化,而建立的物件又頻繁被銷燬的時候,如多執行緒的執行緒池、網路連線池等
- 頻繁訪問資料庫或檔案的物件。
單例模式的實現方法
- 懶漢式(特點是類載入時沒有生成單例,只有當第一次呼叫 getlnstance 方法時才去建立這個單例)
public class LazySingleton {
//保證 instance 在所有執行緒中同步
private static volatile LazySingleton instance = null;
//private 避免類在外部被例項化
private LazySingleton() { }
public static synchronized LazySingleton getInstance() {
//getInstance 方法前加同步
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
- 餓漢式(該特點是類一旦載入就建立一個單例,保證在呼叫 getInstance 方法之前單例已經存在了)
public class HungrySingleton {
//在類建立的同時就已經建立好一個靜態的物件供系統使用,以後不再改變,所以是執行緒安全的,可以直接用於多執行緒而不會出現問題
private static final HungrySingleton instance = new HungrySingleton();
private HungrySingleton() {}
public static HungrySingleton getInstance() {
return instance;
}
}