閱讀360 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java麵向對象基礎--構造方法私有化

1、對構造方法進行封裝

class Singleton{
	private Singleton(){		// 將構造方法進行了封裝,私有化	
	}
	public void print(){
		System.out.println("Hello World!!!") ;
	}
};

2、使用

被私有化構造方法的Singleton類,不能在外部直接實例化。
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() ;	// 錯誤,無法實例化對象
	}
};

在內部進行實例化。
class Singleton{
	Singleton instance = new Singleton() ;	// 在內部產生本類的實例化對象
	private Singleton(){		// 將構造方法進行了封裝,私有化	
	}
	public void print(){
		System.out.println("Hello World!!!") ;
	}
};
public class SingletonDemo03{
	public static void main(String args[]){
		Singleton s1 = null ;	// 聲明對象
	}
};

class Singleton{
	static Singleton instance = new Singleton() ;	// 在內部產生本類的實例化對象
	private Singleton(){		// 將構造方法進行了封裝,私有化	
	}
	public void print(){
		System.out.println("Hello World!!!") ;
	}
};
public class SingletonDemo04{
	public static void main(String args[]){
		Singleton s1 = null ;	// 聲明對象
		s1 = Singleton.instance ;	// 取得實例化對象
		s1.print() ;		// 調用方法
	}
};
正常情況下,屬性應該封裝。代碼最好修改為下麵的形式:
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 ;	// 聲明對象
		s1 = Singleton.getInstance() ;	// 取得實例化對象
		s1.print() ;		// 調用方法
	}
};

3、程序的意義

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() ;		// 調用方法
	}
};

不管外部聲明了多少個Singleton的對象,但是最終結果都是通過getInstance()方法取得的實例化對象。
也就是說,此時s1、s2、s3實際上都使用了一個對象的引用:instance



4、總結

單態設計模式的核心就是將類的構造方法私有化,之後在類的內部產生實例化對象,並通過類的靜態方法返回實例化對象的 應用。



最後更新:2017-04-03 15:22:03

  上一篇:go 用 Hadoop 進行分布式數據處理,從 入門、進階到應用開發
  下一篇:go JavaEE中使用Filter來實現圖片的防盜鏈