当前位置:网站首页>【工厂模式详解】工厂方法模式
【工厂模式详解】工厂方法模式
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
边栏推荐
- Qt界面优化:Qt去边框与窗体圆角化
- Gif to still image processing
- asp.net使用MailMessage发送邮件的方法
- TLC5615 based multi-channel adjustable CNC DC regulated power supply, 51 single chip microcomputer, including proteus simulation and C code
- 顺序栈的基本操作
- API Gateway/API 网关(二) - Kong的使用 - 负载均衡Loadbalance
- Redis源码分析之PSYNC同步
- SHT11传感器的温度湿度监控报警系统单片机Proteus设计(附仿真+论文+程序等)
- Detailed explanation of C language P2 selection branch statement
- 1分钟看懂执行流程,永久掌握for循环(附for循环案例)
猜你喜欢
随机推荐
Nacos作为配置中心(四) 使用Demo
阿里研发三面,面试官一套组合拳让我当场懵逼
JS progress bar, displaying the loading progress
C语言知识点精细详解——数据类型和变量【2】——整型变量与常量【1】
IE8 browser prompts whether to block access to JS script
Notes on Visio drawing topology
Ali developed three sides, and the interviewer's set of combined punches made me confused on the spot
vscode中文插件不生效问题解决
Redis源码分析之PSYNC同步
8.2 文本预处理
Upgrade of openssh and modification of version number
常见存储类型和FTP主被动模式解析
MCU function signal generator, output four kinds of waveforms, adjustable frequency, schematic diagram, simulation and C program
拼接hql时,新增字段没有出现在构造方法中
爬虫练习题(一)
Parameter stack pressing problem of C language in structure parameter transmission
setcontext getcontext makecontext swapcontext
AT89C52 MCU frequency meter (1Hz ~ 20MHz) design, LCD1602 display, including simulation, schematic diagram, PCB and code, etc
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码
流程控制之分支语句