方法工廠模式

在簡單工廠模式中咱們發現一個問題就是咱們的工廠是比較死的,若是咱們新增一個產品,就須要改變工廠模式的判斷條件java

很明顯這是不符合咱們要求的。數據庫

方法工廠模式中咱們有四種角色: 抽象產品 具體產品 抽象工廠 具體工廠
ide



咱們產品是產品 工廠是工廠 咱們一個產品對應一個具體工廠  。日誌


    詳細見下面代碼:code

//抽象產品 
public interface Color {
	public void showColor();
}
//具體產品1
public class RedColor implements Color {
	@Override
	public void showColor() {
		System.err.println("show red");
	}
}

//具體產品2
public class RedColor implements Color {
	@Override
	public void showColor() {
		System.err.println("show yelow");
	}
}

//抽象工廠

public interface ColorFactory {

	public Color newInstance();

}

//工廠實現:
public class RedColorFactory implements ColorFactory {
	
	@Override
	public Color newInstance() {
		return new RedColor();
	}
}

//工廠實現

public class YellowColorFactory implements ColorFactory {

	@Override
	public Color newInstance() {
		return new YellowColor();
	}
}


這樣調用就能夠實現:
               ColorFactory colorFactory = new RedColorFactory();
		Color redColor = colorFactory.newInstance();
		redColor.showColor();

		ColorFactory factory2 = new YellowColorFactory();
		Color yellowColor = factory2.newInstance();
		yellowColor.showColor();


以上代碼就能夠避免簡單工廠的問題產品

假設咱們須要一個BluColor 就新增一個BlurColor的實現類,一個BlueColorFactory的實現類編譯


對原有的代碼沒有任何修改的地方class

ColorFactory factory3 = new BlueColorFactory();
Color blueColor = factory3.newInstance();
blueColor.showColor();

靈活使用擴展



缺點:配置

  • 在添加新產品時,須要編寫新的具體產品類,並且還要提供與之對應的具體工廠類,系統中類的個數將成對增長,在必定程度上增長了系統的複雜度,有更多的類須要編譯和運行,會給系統帶來一些額外的開銷。

本身註解: 咱們增長了一個blueColor就得增長一個產品實現一個工廠實現 成對增長

  • 因爲考慮到系統的可擴展性,須要引入抽象層,在客戶端代碼中均使用抽象層進行定義,增長了系統的抽象性和理解難度,且在實現時可能須要用到DOM、反射等技術,增長了系統的實現難度。

本身註解: 日誌記錄 針對日誌記錄的方式是數據庫 文件 這些均可以放在配置文件中間利用反射區構建

一個日誌記錄的抽象類  2個日誌記錄的具體實現類 分別是文件和數據庫 

這些均可以放在配置文件中利用DOM和反射區指定具體的實現方式

相關文章
相關標籤/搜索