2014-12-06 75 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及其调用者在编译时不耦合