一、單例模式簡介
爲了處理在整個應用程序中某些類只能擁有一個實例的情況,比如基礎的數據庫連接類,爲 了避免數據庫同時被多個數據庫連接對象操作出現非法操作的情況。
二、代碼展示
/**
* @use 單例設計模式
* @author lattice
* @date 2016-12-27
*/
public class Singleton {
public static void main(String[] args) {
SingletonClass.getInstance().say();
SingletonClassLan.getInstance().say();
}
}
/**
* @use 單例類,單例設計模式測試類
* @author lattice
*
*/
class SingletonClass {//餓漢式
// 聲明靜態對象
private static SingletonClass instance = new SingletonClass();
// 私有化構造函數
private SingletonClass() {
}
// 設置當前類對象的靜態訪問方法
public static SingletonClass getInstance() {
return instance;
}
public void say() {
System.out.println("hello this is 餓漢式 a singleton!");
}
}
class SingletonClassLan {//懶漢式暫時存在線程安全問題
// 聲明靜態對象
private static SingletonClassLan instance;// = new SingletonClassLan();
// 私有化構造函數
private SingletonClassLan() {
}
// 設置當前類對象的靜態訪問方法//通過synchronized(同步)處理懶漢式單例設計模式存在的線程安全問題。
//synchronized保證了線程安全,但是降低了效率。
public static synchronized SingletonClassLan getInstance() {
//instance = new SingletonClassLan();
if(instance == null){//通過if處理第一次調用instance對象未被初始化
instance = new SingletonClassLan();
}
return instance;
}
public void say() {
System.out.println("hello this is a 懶漢式 singleton!");
}
}