当前位置:网站首页>【工厂模式详解】工厂方法模式
【工厂模式详解】工厂方法模式
2022-04-23 14:33:00 【Vivien_oO0】
工厂模式
前面已经介绍了简单工厂模式
本文主要介绍
- 工厂方法模式
工厂方法模式
简单工厂模式的缺点是工厂类的职责相对过重,不易于扩展复杂的产品结构。
工厂方法模式(Fatory Method Pattern)是指定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法模式让类的实例化推迟到子类中进行。让工厂方法模式中用户只需要关心所需产品对应的工厂,无须关心创建的细节,而且加入细心的产品时复合开闭原则。
工厂方法模式主要解决产品扩展的问题。在简单工厂模式中,随着产品链的丰富,如果每个课程的创建逻辑有区别,则工厂的职责会变得越来越多,有点像万能工厂 ,不便于维护。根据单一职责原则我们将职能继续拆分,专人干专事。Java课程由Java工厂创建,Python课程由Python工厂创建,对工厂本身也做一个抽象。来看代码:
ICourse代码:
public interface ICourse {
void record();//录制课程
}
JavaCourse代码:
public class JavaCourse implements ICourse {
@Override
public void record() {
System.out.println("录制java课程");
}
}
PythonCourse代码:
public class PythonCourse implements ICourse {
@Override
public void record() {
System.out.println("录制python课程");
}
}
ICourseFactory接口:
public interface ICourseFactory {
ICourse create();
}
再分别创建工厂,JavaCourseFactory
public class JavaCourseFactory implements ICourseFactory {
@Override
public ICourse create() {
return new JavaCourse();
}
}
PythonCourseFactory代码:
public class PythonCourseFactory implements ICourseFactory {
@Override
public ICourse create() {
return new PythonCourse();
}
}
测试代码如下:
public class Test {
public static void main(String[] args) {
ICourseFactory factory = new PythonCourseFactory();
ICourse course = factory.create();
course.record();
factory = new JavaCourseFactory();
course = factory.create();
course.record();
}
}
结果:

再来看一下类图:

可以对比简单共产看一下差异,连接开头已经给出。
工厂方法模式适用于以下场景:
- 创建对象需要大量重复代码
- 应用层不依赖于产品类实例如何被创建、如何被实现细节
- 一个类通过其子类指定创建那个对象
工厂方法模式的缺点:
- 类的个数容易过多,增加了复杂性
- 增加了系统抽象性和理解难度
版权声明
本文为[Vivien_oO0]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_45795744/article/details/124327754
边栏推荐
- Detailed explanation of C language P2 selection branch statement
- 爬虫练习题(一)
- 单相交交变频器的Matlab Simulink建模设计,附Matlab仿真、PPT和论文等资料
- MySQL报错packet out of order
- 循环队列的基本操作(实验)
- DS1302的电子万年历_51单片机,年月日、星期、时分秒、农历和温度,带闹钟,全套资料
- C语言知识点精细详解——初识C语言【1】——你不能不知的VS2022调试技巧及代码实操【1】
- 一篇博客让你学会在vscode上编写markdown
- XX project structure notes
- Some little records~
猜你喜欢

如何5分钟上手使用OCR

AT89C52 MCU frequency meter (1Hz ~ 20MHz) design, LCD1602 display, including simulation, schematic diagram, PCB and code, etc

asp.net使用MailMessage发送邮件的方法

TLS/SSL 协议详解 (30) SSL中的RSA、DHE、ECDHE、ECDH流程与区别

金九银十,入职字节跳动那一天,我哭了(蘑菇街被裁,奋战7个月拿下offer)

setcontext getcontext makecontext swapcontext

【Servlet】Servlet 详解(使用+原理)

爬虫练习题(一)

Parameter stack pressing problem of C language in structure parameter transmission

外包幹了四年,廢了...
随机推荐
Sed learning for application
redis的五种数据类型
本以为能躺着进华为,结果陆续收到京东/滴滴/爱奇艺offer的我迷茫了
Nacos uses demo as configuration center (IV)
查找水仙花数-for循环实践
51 MCU flowers, farmland automatic irrigation system development, proteus simulation, schematic diagram and C code
Detailed explanation of C language P2 selection branch statement
一篇博客让你学会在vscode上编写markdown
Ali developed three sides, and the interviewer's set of combined punches made me confused on the spot
51单片机的直流电机PWM调速控制系统(附Proteus仿真+C程序等全套资料)
Redis源码分析之HSET流程与ziplist
QT actual combat: Yunxi calendar
外包干了四年,废了...
电子秤称重系统设计,HX711压力传感器,51单片机(Proteus仿真、C程序、原理图、论文等全套资料)
Electronic perpetual calendar of DS1302_ 51 single chip microcomputer, month, day, week, hour, minute and second, lunar calendar and temperature, with alarm clock and complete set of data
1 minute to understand the execution process and permanently master the for cycle (with for cycle cases)
AT89C52单片机的频率计(1HZ~20MHZ)设计,LCD1602显示,含仿真、原理图、PCB与代码等
浅谈skiplist在LevelDB的应用
8.3 语言模型与数据集
51单片机+LCD12864液晶显示的俄罗斯方块游戏,Proteus仿真、AD原理图、代码、论文等