摘要: 摘要: 原創出處: http://www.cnblogs.com/Alandre/ 泥沙磚瓦漿木匠 希望轉載,保留摘要,謝謝!
事雖險,吾善為;苟擅為,子道虧。物雖小,勿私藏;苟私藏,親心傷。
一、什麼是簡單工廠模式
簡單工廠模式屬於類的建立型模式,又叫做靜態工廠方法模式。通過專門定義一個類來負責建立 其他類的例項,被建立的例項通常都具有共同的父類。
二、模式中包含的角色及其職責
1.工廠(Creator)角色
簡單工廠模式的核心,它負責實現建立所有例項的內部邏輯。工廠類可以被外界直接呼叫,建立所需的產品物件。
2.抽象(Product)角色
簡單工廠模式所建立的所有物件的父類,它負責描述所有例項所共有的公共介面。
3.具體產品(Concrete Product)角色
簡單工廠模式所建立的具體例項物件
注意:1.在工廠類中,實現邏輯。最好不能再子類或者父類中實現程式碼邏輯。2.物件子類繼承父類的介面。
下面我們來個一個關於工廠類的最簡單的例子:
先給出一個介面父類 Fruit.java,並且賦予採集方法
public interface Fruit { /* * 採集 */ public void get(); }
隨後,有兩個實體類 Apple.java 和 Banana.java
public class Apple implements Fruit { /* * 採集 */ public void get() { System.out.println("採集Apples"); } } public class Apple implements Fruit { /* * 採集 */ public void get() { System.out.println("採集Apples"); } }
這樣,我們彷彿有了原材料,簡單工廠模式,就像工廠產出商家所需要的東西。
三.簡單工廠類FruitFactory.java的升級之路
粗劣的版本如下:
public class FruitFactory { /** * 獲得Apple類例項 */ public static Fruit getApple() { return new Apple(); } /** * 獲得Banana類例項 */ public static Fruit getBanana() { return new Banana(); } }
升級下:
public class FruitFactory {/** * get方法,獲得所有產品物件 * @throws IllegalAccessException * @throws InstantiationException */ public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException { if (type.equalsIgnoreCase("apple")) { return Apple.class.newInstance(); }else if (type.equalsIgnoreCase("apple")) { return Banana.class.newInstance(); }else return null; } }
在思考,究極版:
public class FruitFactory { /** * get方法,獲得所有產品物件 * @throws IllegalAccessException * @throws InstantiationException * @throws ClassNotFoundException */ public static Fruit getFruit(String type) throws ClassNotFoundException, InstantiationException, IllegalAccessException { Class<?> fruit = Class.forName(type); return (Fruit)fruit.newInstance(); } }
測試下,我們的工廠:
public class MainClass { public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException { Fruit apple = FruitFactory.getFruit(Apple.class.getName()); Fruit banana = FruitFactory.getFruit(Banana.class.getName()); apple.get(); banana.get(); } }
你可以看到列印出:
採集Apples
採集Banana
相關資料:
java.lang.Class<T>
static Class<?>
forName(String className)
返回與帶有給定字串名的類或介面相關聯的 Class
物件。
public T newInstance()
Creates a new instance of the class represented by this {@code Class}
public final Class<?> getClass()
- 返回此
Object
的執行時類。返回的Class
物件是由所表示類的static synchronized
方法鎖定的物件。
四 簡單工廠模式的優缺點
在這個模式中,工廠類是整個模式的關鍵所在。它包含必要的判斷 邏輯,能夠根據外界給定的資訊,決定究竟應該建立哪個具體類的 物件。使用者在使用時可以直接根據工廠類去建立所需的例項,而無 需瞭解這些物件是如何建立以及如何組織的。有利於整個軟體體系 結構的優化。不難發現,簡單工廠模式的缺點也正體現在其工廠類上,由於工廠類集中 了所有例項的建立邏輯,所以“高內聚”方面做的並不好。另外,當系統中的 具體產品類不斷增多時,可能會出現要求工廠類也要做相應的修改,擴充套件 性並不很好。
五 感謝知識來源和小結
來自:java設計模式
如以上文章或連結對你有幫助的話,別忘了在文章按鈕或到頁面右下角點選 “贊一個” 按鈕哦。你也可以點選頁面右邊“分享”懸浮按鈕哦,讓更多的人閱讀這篇文章。