天天看點

JAVA單态設計模式

首先要說:

 構造方法私有化,類的封裝性不光展現在對屬性的封裝上,實際上方法也可以封裝,當構造方法被私有化(封裝),一個類的構造方法私有化之後,則隻能從其類的内部取得執行個體化對象,那麼此時要考慮的問題就是把内部生成的對象全部拿到外部類。 

class Singleton{
	private Singleton(){		// 将構造方法進行了封裝,私有化	
	}
	public void print(){
		System.out.println("Hello World!!!") ;
	}
};
public class SingletonDemo02{
	public static void main(String args[]){
		Singleton s1 = null ;	// 聲明對象
		s1 = new Singleton() ;	// 錯誤,無法執行個體化對象,因為在執行個體化時,構造方法被私有
	}
};           

正常情況下,對象屬性隻能通過Singleton類的執行個體化對象才可以進行調用,如果沒有執行個體化對象的時候可以去的對象,則就需要将對象聲明成static通路類型。因為使用static聲明變量,可以直接使用類名稱通路。

class Singleton{
	private static Singleton instance = new Singleton() ;	// 在内部産生本類的執行個體化對象
	public static Singleton getInstance(){		// 通過靜态方法取得instance對象
		return instance ;
	}
	private Singleton(){		// 将構造方法進行了封裝,私有化	
	}
	public void print(){
		System.out.println("Hello World!!!") ;
	}
};
public class SingletonDemo05{
	public static void main(String args[]){
		Singleton s1 = null ;	// 聲明對象
		Singleton s2 = null ;	// 聲明對象
		Singleton s3 = null ;	// 聲明對象
		s1 = Singleton.getInstance() ;	// 取得執行個體化對象
		s2 = Singleton.getInstance() ;	// 取得執行個體化對象
		s3 = Singleton.getInstance() ;	// 取得執行個體化對象
		s1.print() ;		// 調用方法
		s2.print() ;		// 調用方法
		s3.print() ;		// 調用方法
	}
};           

圖1、

這種設計模式,屬于單态設計模式,一個類不會産生過多的對象