定义

  • 一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式让类的实例化推迟到子类中进行。
  • 隶属于创建型设计模式

使用场景

  • 创建对象需要大量的重复代码
  • (客户端)不依赖于产品类实例如何被创建、实现等细节
  • 一个类通过其子类来指定创建那个对象

设计原则

  • 面向对象的多态特性,与里氏替换原则(父类使用子类进行替换不会引起错误与异常,重要的oop思想)。

优点

  • 用户只需要关心所需产品的对应工厂,无需关系细节。
  • 加入新产品符合开闭原则,提高扩展性。

缺点

类的个数容易过多,增加复杂度。
增加了系统的抽象性和理解难度。

扩展技术

  • 抽象类
  • 反射

源代码实现

  • Java.util.Collection.iterator() 就是一个工厂方法,ArrayList HashSet ArrayDeque 就实现了方法