正确使用抽象工厂

时间:2014-12-06 15:20:00

标签: java oop design-patterns factory abstraction

当我觉得需要在我的项目中设立工厂课程时,我很想使用这种方法:

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;   
     }    

}

在这两种情况下,无论何时添加新产品,交换机都需要在某处更改以包含新创建的产品。

我的问题是,如果我错过了我的方法,那么使用抽象工厂会有什么好处。

1 个答案:

答案 0 :(得分:0)

在Factory模式中,您已经决定了集成的ProductFactory实现

在抽象工厂模式中,您可以决定在运行时集成的ProductFactory。相反,ProductFactory及其调用者在编译时没有耦合