1. 程式人生 > >【effective java】考慮用靜態工廠方法替代構造器

【effective java】考慮用靜態工廠方法替代構造器

這裡所說的靜態工廠方法就是返回型別例項的靜態方法。

那麼為什麼不使用構造器呢?用構造器方式構造例項不是我們一直約定好的嗎?

嘿嘿 主要原因還是我們的構造器方法規定的太多限制了我們程式的靈活性:

構造器規定一:構造器只能本類例項,不能返回子類例項對吧。

構造器規定二:構造器一出現就必會建立一個例項。

相比靜態工廠方法就沒那麼多規定了

"我"可以建立物件還可以不建立物件(直接從記憶體中拿一個曾經建立好的物件)------>對應構造器規定二

"我"可以通過引數返回任何子型別的例項--------->對應構造器規定一

public class StaticFactoryMethodClass {
	/**
	 * 這是靜態工廠方法
	 * 
	 * @param type
	 * @return
	 */
	public StaticFactoryMethodClass newIntefanceByType(String type) {

		if (type.equals("SubA")) {
			return new SubA();
		}
		if (type.equals("SubB")) {
			return new SubB();
		} else
			return new StaticFactoryMethodClass();
	}
	
	
}

public class SubA extends StaticFactoryMethodClass{

}

public class SubB extends StaticFactoryMethodClass{

}

感覺上邊的程式碼雖然可以說明返回型別可以為任何子型別  但是中程式碼很垃圾若是另一個類繼承了StaticFactoryMethodClass

還得寫一個if判斷   擴充套件性不好!---誰有更好的例子

靜態工廠方法那麼多優勢甚至可以完全替代構造器了  幹嘛還要構造器  用私有構造器隱藏了只用靜態工廠方法例項物件多好

當你隱藏構造器的時候有沒有想過這個類就不能被繼承了

如上邊

StaticFactoryMethodClass

這個類的建構函式為private

那麼SubA和SubB繼承的時候就會報錯