Java常用设计模式浅析系列
工厂方法模式
一、概述
工厂方法模式(Fatory Method Pattern)是指定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,
工厂方法让类的实例化推迟到子类中进行。
在工厂方法模式中用户只需要关心所需产品对应的工厂,无须关心创建细节,而且加入新的产品符合开闭原则。
工厂方法模式主要解决产品扩展的问题,在简单工厂中,随着产品链的丰富,如果每个课程的创建逻辑有区别,
工厂的职责会变得越来越多,有点像万能工厂,并不便于维护。
根据单一职责原则我们将职能继续拆分,专人干专事。
- Java 课程由 Java 工厂创建
- Python 课程由 Python 工厂创建
- 对工厂本身也做一个抽象
工厂方法适用于以下场景:
- 创建对象需要大量重复的代码。
- 客户端(应用层)不依赖于产品类实例如何被创建、如何被实现等细节。
- 一个类通过其子类来指定创建哪个对象。
工厂方法的缺点:
- 类的个数容易过多,增加复杂度。
- 增加了系统的抽象性和理解难度。
转自 https://www.yuque.com/yinjianwei/vyrvkf/rx96bb
二、示例代码
public interface ICourse {
//录制课程
void record();
}
public interface ICourseFactory {
ICourse crete();
}
public class JavaCourse implements ICourse {
@Override
public void record() {
System.out.println("录制 Java 课程");
}
}
public class JavaCourseFactory implements ICourseFactory{
@Override
public ICourse crete() {
//返回 新的 JavaCourse 新对象
return new JavaCourse();
}
}
public class PythonCourse implements ICourse{
@Override
public void record() {
System.out.println("录制 Python 课程");
}
}
public class PythonCourseFactory implements ICourseFactory {
@Override
public ICourse crete() {
//返回 新的 PythonCourse 新对象
return new PythonCourse();
}
}
三、测试代码
public class FactoryMeTest {
public static void main(String[] args) {
//创建 PythonCourseFactory 工厂对象
ICourseFactory factory = new PythonCourseFactory();
ICourse course = factory.crete();
course.record();
//创建 JavaCourseFactory 工厂对象
factory = new JavaCourseFactory();
course = factory.crete();
course.record();
}
}
总结
工厂方法适用于以下场景:
● 创建对象需要大量重复的代码。
● 客户端(应用层)不依赖于产品类实例如何被创建、如何被实现等细节。
● 一个类通过其子类来指定创建哪个对象。
工厂方法的缺点:
● 类的个数容易过多,增加复杂度。
● 增加了系统的抽象性和理解难度。