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

概念

簡單工廠模式屬於類的創建型模式, 又叫做靜態工廠方法模式. 通過專門定義一個類來負責創建其他類的實例, 被創建的實例通常都具有共同的父類

結構

模式中包含的角色及其職責: 
工廠(Creator)角色: 簡單工廠模式的核心, 他負責實現創建所有實例的內部邏輯. 工廠類可以被外界直接調用, 創建所需要的產品對象
抽象(Product)角色: 簡單工廠模式所創建的所有對象的父類, 他負責描述所有實例所公用的公共接口
具體產品(Concrete Product)角色: 簡單工廠模式所創建的具體實例對象

代碼

工廠
package design.simplefactory;

public class FruitFactory {
	/**
	 * get方法, 獲得所有產品對象
	 */
	public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException, ClassNotFoundException {

		// if ("apple".equalsIgnoreCase(type)) {
		// return Apple.class.newInstance();
		// } else if ("banana".equalsIgnoreCase(type)) {
		// return Banana.class.newInstance();
		// } else {
		// System.err.println("找不到相應的實例化類");
		// }
		// return null;

		// 改進
		Class<?> fruit = Class.forName(type);
		return (Fruit) fruit.newInstance();
	}
}
抽象
package design.simplefactory;

public interface Fruit {
	void get();
}

具體產品
package design.simplefactory;

public class Apple implements Fruit {

	@Override
	public void get() {
		System.out.println("蘋果");
	}

}

package design.simplefactory;

public class Banana implements Fruit {

	@Override
	public void get() {
		System.out.println("香蕉");
	}

}
測試類
package design.simplefactory;

public class MainClass {
	public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
		FruitFactory.getFruit("design.simplefactory.Apple").get();
		FruitFactory.getFruit("design.simplefactory.Banana").get();
	}
}

優缺點

在這個模式中, 工廠類是這個模式的關鍵所在. 它包含必要的判斷邏輯, 能夠根據外界給定的信息, 決定究竟應該創建哪個具體類的對象. 用戶在使用時可以直接根據工廠類去創建所需的實例, 而無需瞭解這些對象是如何創建以及如何組織的. 有利於整個軟件體系結構的優化
不難發現, 簡單工廠模式的缺點也整體現在工廠類上, 由於工廠類集中了所有實例的創建邏輯, 所以"高內聚"方面做得並不好. 另外, 當系統中的具體產品類不斷增多時, 可能會出現要求工廠類也要做相應的修改, 擴展性並不好
發佈了31 篇原創文章 · 獲贊 10 · 訪問量 9407
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章