java設計模式-簡單工廠模式

工廠模式是最常用的一類創建型設計模式,通常我們所說的工廠模式是指工廠方法模式,它也是使用頻率最高的工廠模式。今天我們將學習簡單工廠模式。如題,簡單工廠模式將是工廠模式中最簡單的。

簡單工廠模式(Simple Factory Pattern):定義一個工廠類,它可以根據參數的不同返回不同類的實例,被創建的實例通常都具有共同的父類。因爲在簡單工廠模式中用於創建實例的方法是靜態(static)方法,因此簡單工廠模式又被稱爲靜態工廠方法(Static FactoryMethod)模式,它屬於類創建型模式。

簡單工廠模式的要點在於:當你需要什麼,只需要傳入一個正確的參數,就可以獲取你所需要的對象,而無須知道其創建細節。

簡單工廠模式包含以下幾個角色:

①Factory(工廠角色):工廠角色即工廠類,它是簡單工廠模式的核心,負責實現創建所有產品實例的內部邏輯;工廠類可以被外界直接調用,創建所需的產品對象。

②Product(抽象產品角色):它是工廠類所創建的所有對象的父類,封裝了各種產品對象的公有方法,它的引入將提高系統的靈活性,使得在工廠類中只需定義一個通用的工廠方法,因爲所有創建的具體產品對象都是其子類對象。

③ConcreteProduct(具體產品角色):它是簡單工廠模式的創建目標,所有被創建的對象都充當這個角色的某個具體類的實例。每一個具體產品角色都繼承了抽象產品角色,需要實現在抽象產品中聲明的抽象方法。

在使用簡單工廠模式時,首先需要對產品類進行重構,典型的抽象產品類代碼如下:

/**
 * 簡單工廠模式,抽象出產品類
 */
public abstract class Product {

	//所有產品類的公共業務方法
	public void commonMethod() {
	//公共方法的實現
	}
	
	//聲明抽象業務方法
	public abstract void methodDiff();
	
}

具體產品實現抽象類代碼如下:

/**
 * 子類繼承抽象類,根據自身業務邏輯實現抽象方法
 */
public class ConcreteProduct extends Product {

	//實現業務方法
	@Override
	public void methodDiff() {

	}

}

 簡單工廠模式的核心是工廠類,在沒有工廠類之前,客戶端一般會使用new關鍵字來直接創建產品對象,而在引入工廠類之後,客戶端可以通過工廠類來創建產品,代碼如下:

/**
 * 簡單工廠模式核心爲工廠類,根據不同類型,產生不同產品。
 */
public class Factory {

	public static Product createProduct(String type) {
		Product product = null;
		if ("A".equals(type)) {
			product = new ConcreteProduct();
		} else {
			product = new ChildProduct();
		}
		return product;
	}
}

客戶端代碼如下:

public class Client {

	public static void main(String[] args) {
		Product product;
		product = Factory.createProduct("A"); //通過工廠類創建產品對象
		product.commonMethod();
		product.methodDiff();
	}
}

 如上,在實際的應用開發中,我們可以根據具體需求去創建我們鎖需要的對象,但是在這一過程中,我們會發現還是違反了java面向對象設計原則的"開閉原則",因爲,當我們有新的產品類型加入時,還是要修改客戶端的代碼,此時我們可以將產品配置寫在配置文件中,這樣就對我們的代碼進行了優化。

簡單工廠模式總結:

優點:

(1) 工廠類包含必要的判斷邏輯,可以決定在什麼時候創建哪一個產品類的實例,客戶端可以免除直接創建產品對象的職責,而僅僅“消費”產品,簡單工廠模式實現了對象創建和使用的分離。

(2) 客戶端無須知道所創建的具體產品類的類名,只需要知道具體產品類所對應的參數即可,對於一些複雜的類名,通過簡單工廠模式可以在一定程度減少使用者的記憶量。
(3) 通過引入配置文件,可以在不修改任何客戶端代碼的情況下更換和增加新的具體產品類,在一定程度上提高了系統的靈活性。

缺點:

(1) 由於工廠類集中了所有產品的創建邏輯,職責過重,一旦不能正常工作,整個系統都要受到影響。
(2) 使用簡單工廠模式勢必會增加系統中類的個數(引入了新的工廠類),增加了系統的複雜度和理解難度。
(3) 系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,在產品類型較多時,有可能造成工廠邏輯過於複雜,不利於系統擴展和維護。
(4) 簡單工廠模式由於使用了靜態工廠方法,造成工廠角色無法形成基於繼承的等級結構。

適用場景:

(1) 工廠類負責創建的對象比較少,由於創建的對象較少,不會造成工廠方法中的業務邏輯太過複雜。
(2) 客戶端只知道傳入工廠類的參數,對於如何創建對象並不關心。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章