2012-02-02 106 views
7

據我瞭解,工廠方法是簡單工廠和工廠對象是抽象工廠? 人和:工廠方法VS工廠對象

- 工廠方法(簡單工廠):

public class SimplePizzaFactory { 
    public static final int CHEESE = 1; 
    public static final int PEPPERONI = 2; 
    public static final int VEGGIE = 3; 

    public static Pizza createPizza(int type) { 
     Pizza pizza = null; 

     if (type == CHEESE) { 
      pizza = new CheesePizza(); 
     } else if (type == PEPPERONI) { 
      pizza = new PepperoniPizza(); 
     } else if (type == VEGGIE) { 
      pizza = new VeggiePizza(); 
     } 

     return pizza; 
    } 
} 

工廠對象(抽象工廠):

我對不對?

工廠模式有多少實現,它們有什麼不同?

+0

你是對的,謝謝 – drifter 2012-02-02 19:06:48

+0

另一件事,除非你使用一些古老的Java版本,請使用枚舉而不是整數來枚舉可能的比薩類型。 – Renato 2012-02-02 19:14:07

+0

+1,我發現這個古老的例子(Java的那個時候還沒有枚舉呢。) – drifter 2012-02-02 19:16:56

回答

6

否。工廠方法是不需要任何狀態的工廠。工廠類本身就是一個類 - 它具有狀態和改變該狀態的方法。最後你調用.create()方法,它使用它的當前狀態來創建一個不同類型的新對象。

抽象工廠是不同的東西 - 在那裏你有多個相同抽象概念的工廠實現。 wikipedia example約爲e GUIFactory - 這是一個抽象工廠,它有兩個實現:WinFactoryOSXFactory。客戶端代碼不知道它正在使用哪個實現 - 它只知道工廠創建了Button實例。無論操作系統如何,都可以編寫相同的代碼。

+0

因此,有3種主要類型: - 工廠 - 抽象工廠 - 工廠方法 ? – drifter 2012-02-02 19:02:18

+0

是的,這是正確的。工廠和工廠的方法雖然沒有太大的差異。 – Bozho 2012-02-02 19:02:53

+0

你的回答很明確。我瞭解工廠和工廠方法之間有什麼區別,但哪個更好用?爲什麼? – grep 2015-06-19 10:06:29