單例模式
核心作用:保證一個類隻有一個執行個體,并且提供一個通路該執行個體的全局通路點
單例模式的優點:由于單例模式隻生成一個執行個體,減少了系統性能開銷,當一個對象的産生需要比較多的資源時,如讀取配置、産生其他依賴對象時,則可以通過在應用啟動時直接産生一個單例對象,然後永久駐留記憶體的方式來解決
常見的五種單例模式實作方式:• 餓漢式(線程安全,調用效率高。 但是,不能延時加載。)
• 懶漢式(線程安全,調用效率不高。 但是,可以延時加載。)
餓漢式
package cn.dym;
/**
* 測試餓漢式單例模式
* @author Administrator
*
*/
public class SingletonDemo01 {
//類初始化時,立即加載這個對象 (沒有延時加載的優勢) // 加載類時,天然的是線程安全
private static SingletonDemo01 instance=new SingletonDemo01();
private SingletonDemo01() {
}
//方法沒有同步,調用效率高
public static SingletonDemo01 getInstance() {
return instance;
}
}
懶漢式:資源使用率高了。但是,每次調用getInstance()方法都要同步,并發效率較低
package cn.dym;
/**
* 測試懶漢式單例模式
* @author Administrator
*
*/
public class SingletonDemo02 {
//類初始化時,不初始化這個對象 (延時加載,真正用的時候在建立)
private static SingletonDemo02 instance;
private SingletonDemo02() { //私有化構造器
}
//方法同步,調用效率低
public static synchronized SingletonDemo02 getInstance() {
if(instance==null) {
instance=new SingletonDemo02();
}
return instance;
}
}