定義:java
簡單工廠模式又稱之爲靜態工廠方法,屬於建立型模式。在簡單工廠模式中,能夠根據傳遞的參數不一樣,返回不一樣類的實例。簡單工廠模式定義了一個類,這個類專門用於建立其餘類的實例,這些被建立的類都有一個共同的父類。app
示例代碼:ide
Fruit.javaui
package com.designPattern.simpleFactory; /*** * * @author liuzhihu * */ public interface Fruit { /*** * 定義吃水果的方法 */ public void eatFruit(); }
Apple.javaspa
package com.designPattern.simpleFactory; /*** * * @author liuzhihu * */ public class Apple implements Fruit { /*** * 實現吃水果的方法 */ @Override public void eatFruit() { System.out.println("吃蘋果 ......"); } }
Banana.javaorm
/*** * * @author liuzhihu * */ public class Banana implements Fruit { /*** * 實現吃水果的方法 */ @Override public void eatFruit() { System.out.println("吃香蕉 ......"); } }
FruitFactory.java對象
package com.designPattern.simpleFactory; public class FruitFactory { /*** * 採集方法 * * @param type * @return */ public static Fruit getFruit(String type) { if ("Apple".equals(type)) { return new Apple(); } else if ("Banana".equals(type)) { return new Banana(); } else { System.out.println("找不到對應的水果......"); return null; } } }
MainTest.java blog
package com.designPattern.simpleFactory; /*** * 簡單工廠模式 * * @author liuzhihu * */ public class MainTest { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { Fruit apple = FruitFactory.getFruit("Apple"); apple.eatFruit(); Fruit banana = FruitFactory.getFruit("Banana"); banana.eatFruit(); } }
優勢繼承
一、簡單工廠模式實現了對責任的分割,提供了專門的工廠類用於建立對象。get
二、客戶端無須知道所建立的具體產品類的類名,只須要知道具體產品類所對應的參數便可,對於一些複雜的類名,經過簡單工廠模式能夠減小使用者的記憶量。
三、經過引入配置文件,能夠在不修改任何客戶端代碼的狀況下更換和增長新的具體產品類,在必定程度上提升了系統的靈活性。
缺點
一、因爲工廠類集中了全部產品建立邏輯,一旦不能正常工做,整個系統都要受到影響。
二、使用簡單工廠模式將會增長系統中類的個數,在必定程序上增長了系統的複雜度和理解難度。
三、系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,在產品類型較多時,有可能形成工廠邏輯過於複雜,不利於系統的擴展和維護。
四、簡單工廠模式因爲使用了靜態工廠方法,形成工廠角色沒法造成基於繼承的等級結構。