简介: 介绍工厂方法(Fatory Method
)的基本使用以及使用场景,点明工厂方法的优缺点以及在我们平时的源码中有哪些具体的体现
1. 基本概念
-
工厂方法模式(
Fatory Method
)是指定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 -
在工厂方法中我们关心相应产品对象的创建工厂,而不关心对象的实际创建细节,在增加产品时也符合了开闭原则
2. 解决的主要问题
- 工厂方法主要解决了在简单工厂中产品扩展的问题,在之前我们说的简单工厂中,随着产品的不断增多,我们工厂的职责也会越来越多,有点像万能工厂,维护性会不断降低,同时也是不符合单一职责原则的
3. 工厂方法实现
-
更具单一职责原则,我们让专门的
Java
工厂来生产Java
课程,python
工厂创建python
课程,同时对工厂进行一定的抽象 -
首先创建工厂接口
CourseFactory
:
public interface CourseFactory {
/**
* 创建对象
* @return
*/
Course create();
}
- 分别创建
Java
和python
的创建工厂:
public class JavaCourseFactory implements CourseFactory {
/**
* 创建对象
* @return
*/
@Override
public Course create() {
return new JavaCourse();
}
}
public class PythonCourseFactory implements CourseFactory {
/**
* 创建对象
* @return
*/
@Override
public Course create() {
return new PythonCourse();
}
}
- 测试代码
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中的类图,充分体现了这一原则特性
4. 总结
-
工厂方法相对比较简单,它是在简单工厂的基础上对工厂进行了一定抽象化处理,将共工厂职责进行了职责划分
-
工厂方法使用场景:
- 需要创建对象的代码大量重复
- 调用端(应用层)不依赖于对象创建的具体实现和细节
- 一个类通过其子类来确定创建的具体对象
-
工厂方法的缺点:
- 复杂度增加,因为会出现大量的类,这里在实际开发中需要做一定的收敛与职责划分,降低复杂度
- 增加了系统的整体抽象性与理解难度