2014-12-06 93 views
-1

當我覺得有在我的項目一個工廠類的需要,我很想用這個辦法:正確使用抽象工廠的

public class ProductFactory { 

    public Product makeProduct(Type t){ 
      switch (t) { 
      case A: return new ProductA(); break; 
      case B: return new ProductB(); break; 
      default: throw new UnsupportedTypeException(); 
      }  
      return null; 
    } 
} 

凡產品選擇的邏輯封裝工廠內目的。

對於抽象工廠模式,取而代之的是,從我所瞭解到的方法來看,也是抽象工廠,並根據產品選擇邏輯對其進行實例化。

public class ProductFactoryFactory { 

    public ProductFactory getProductFactory(Type t){ 
      switch (t) { 
      case A: return new ProductFactoryA(); break; 
      case B: return new ProductFactoryB(); break; 
      default: throw new UnsupportedTypeException(); 
      } 
      return null; 
    }  

} 

在每次添加一個新的產品兩種情況下,交換機需要以包括新創建的產品的地方改變。

我的問題是如果我用我的方法失去了一些東西,取而代之的是使用抽象工廠的優點。

+0

這不會編譯,你有一個'return'和'break'。你錯過的是DI! – 2014-12-06 15:26:34

+0

這個問題似乎是題外話題,因爲它不是一個具體問題,而是關於設計模式的一般問題。因此它屬於程序員SE。 – 2014-12-06 15:29:27

+0

@BoristheSpider謝謝你,我糾正了代碼。爲了簡單起見,我省略了依賴關係。你能否更好地解釋依賴注入與如何相關? – DanTheMan 2014-12-06 15:41:05

回答

0

在工廠模式,你已經決定了你集成

在抽象工廠模式的ProductFactory實現,你可以決定ProductFactory在運行時集成。相反,ProductFactory及其調用者在編譯時不耦合