天天看點

java中的單例模式(懶漢模式和餓漢模式)

所謂單例模式,主要是為了解決,java對象有且隻有一個,本質就是構造方法私有化,

單例模式:主要是為了節省記憶體空間,缺點是不能被繼承,因為構造方法私有化了,外部的程式不能被調用了,

     * 懶漢模式:構造方法私有化,

     * 第一步:講所有構造方法私有化,目的是讓外部程式不能被調用,然後建立了一個方法,用來供外部程式調用

     * */ 

public class Customer {
	/*單例模式:主要是為了節省記憶體空間,确定是不能被繼承,構造方法私有化,外部
	 * 程式不能調用構造方法,隻在記憶體當中
	 * 懶漢模式:構造方法私有化,
	 * 第一步:講所有構造方法私有化,目的是讓外部程式不能被調用
	 * */
	private static Customer c;
	
	private Customer(){}
	//對外提供了一個公開的擷取customer類型對象的方法
	public static Customer getInstance(){
		if(c==null){
			c=new Customer();
		}
		return c;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Customer c1=Customer.getInstance();
		Customer c2=Customer.getInstance();
		System.out.println(c1==c2);

	}
}
           

列印結果: true

餓漢模式: 在類加載的階段就已經建立這個對象了,

/*餓漢模式*/
public class Customer{
	//靜态變量
	private static Customer c=new Customer();
	//單例模式第一步:講所有構造方法私有化,
	// 目的是:讓外部程式不能,直接調用構造方法建立對象
	//因為隻要構造方法執行,就會有一個新的對象誕生
	private Customer(){}
	// 對外提供一個公開的擷取Customer類型對象的方法
	public static Customer getInstance(){
		return c;
	}
	public static void main(String[] args) {
	// TODO Auto-generated method stub
	
	Customer c1=Customer.getInstance();
	Customer c2=Customer.getInstance();
	System.out.println(c1==c2);

}
}