简介: 介绍工厂方法( Fatory Method )的基本使用以及使用场景,点明工厂方法的优缺点以及在我们平时的源码中有哪些具体的体现

1. 基本概念

  • 工厂方法模式( Fatory Method )是指定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行

  • 在工厂方法中我们关心相应产品对象的创建工厂,而不关心对象的实际创建细节,在增加产品时也符合了开闭原则

2. 解决的主要问题

  • 工厂方法主要解决了在简单工厂中产品扩展的问题,在之前我们说的简单工厂中,随着产品的不断增多,我们工厂的职责也会越来越多,有点像万能工厂,维护性会不断降低,同时也是不符合单一职责原则的

3. 工厂方法实现

  • 更具单一职责原则,我们让专门的 Java 工厂来生产 Java 课程, python 工厂创建 python 课程,同时对工厂进行一定的抽象

  • 首先创建工厂接口 CourseFactory :

1
2
3
4
5
6
7
public interface CourseFactory {
/**
* 创建对象
* @return
*/
Course create();
}
  • 分别创建 Javapython 的创建工厂:
1
2
3
4
5
6
7
8
9
10
public class JavaCourseFactory implements CourseFactory {
/**
* 创建对象
* @return
*/
@Override
public Course create() {
return new JavaCourse();
}
}
1
2
3
4
5
6
7
8
9
10
public class PythonCourseFactory implements CourseFactory {
/**
* 创建对象
* @return
*/
@Override
public Course create() {
return new PythonCourse();
}
}
  • 测试代码
1
2
3
4
5
6
7
8
9
10
11
public static void main( String[] args )
{
CourseFactory factory = new JavaCourseFactory();
Course course = factory.create();
course.liveCourse();

factory = new PythonCourseFactory();
course = factory.create();
course.liveCourse();

}
  • 上述类图如下:

工厂方法类图展示

  • 我们可以看一下logback中的类图,充分体现了这一原则特性

ILoggerFactory与实现的类图

4. 总结

  • 工厂方法相对比较简单,它是在简单工厂的基础上对工厂进行了一定抽象化处理,将共工厂职责进行了职责划分

  • 工厂方法使用场景:

    • 需要创建对象的代码大量重复
    • 调用端(应用层)不依赖于对象创建的具体实现和细节
    • 一个类通过其子类来确定创建的具体对象
  • 工厂方法的缺点:

    • 复杂度增加,因为会出现大量的类,这里在实际开发中需要做一定的收敛与职责划分,降低复杂度
    • 增加了系统的整体抽象性与理解难度

----------

微信公众号


欢迎关注公众号“云栖简码”