定义
- 一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式让类的实例化推迟到子类中进行。
- 隶属于创建型设计模式
使用场景
- 创建对象需要大量的重复代码
- (客户端)不依赖于产品类实例如何被创建、实现等细节
- 一个类通过其子类来指定创建那个对象
设计原则
- 面向对象的多态特性,与里氏替换原则(父类使用子类进行替换不会引起错误与异常,重要的oop思想)。
优点
- 用户只需要关心所需产品的对应工厂,无需关系细节。
- 加入新产品符合开闭原则,提高扩展性。
缺点
类的个数容易过多,增加复杂度。
增加了系统的抽象性和理解难度。
扩展技术
- 抽象类
- 反射
源代码实现
- Java.util.Collection.iterator() 就是一个工厂方法,ArrayList HashSet ArrayDeque 就实现了方法
