会员
周边
众包
新闻
博问
闪存
赞助商
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
gezishan007
博客园
首页
新随笔
联系
订阅
管理
随笔 - 11
文章 - 0
评论 - 3
阅读 -
2469
设计模式之工厂设计模式
本文主要介绍工厂设计模式的由来和主要形式,分别介绍和分析了普通工厂方法模式、多个工厂方法模式、静态工厂方法模式以及抽象工厂方法模式。
1.开发环境
IDEA版本: 2022.1.4
JDK版本:17.0.3
2.模式由来
2.1 自定义MailSender类
2.2 自定义Computer类
2.3 分析图
2.4 案例分析
由于Computer类和MailSender类之间的耦合度比较高,而且创建对象的代码太固定了,若希望使用短信发送的功能需要修改Computer类,这种修改违背了开闭原则,为了解决该问题,就可以将创建对象的工作移交出去,而工厂设计模式就是一种创建对象的设计模式,而且可以在创建对象时不对外暴露具体的创建逻辑。
3 普通工厂方法模式
3.1 基本概念
普通工厂方法模式就是建立一个工厂类,通过生产方法的参数来进行具体实例的创建。
3.2 自定义Sender接口
3.3 修改MailSender类
3.4 自定义SmsSender类
3.5 自定义SendFactory类
3.6 修改Computer类
3.7 分析图
3.8 案例分析
在普通工厂方法模式中,若传递的字符串出错,则不能正确创建对象,而且可能出现空指针异常,所以容错率不高。
4.多个工厂方法模式
4.1 基本概念
多个工厂方法模式就是通过多个不同的生产方法对实现同一接口的不同实现类分别进行对象的创建。
4.2 修改SendFactory类
4.3 修改Computer类
4.4 分析图
4.5 案例分析
在多个工厂方法模式中,为了能够正确创建对象,需要先创建工厂类的对象才能调用工厂类中的生产方法。
5.静态工厂方法模式
5.1 基本概念
静态工厂方法模式就是将多个不同的生产方法加上static关键字提升为类层级,此时只需要通过类名.的方式就可以进行方法的调用,从而进行不同实例的创建。
5.2 修改SendFactory类
5.3 修改Computer类
5.4 分析图
5.5 案例分析
静态工厂方法模式中类的创建依赖工厂类,如果想要扩展程序来生产新的产品,就必须对工厂类的代码进行修改,这就违背了开闭原则。
6.抽象工厂模式
6.1 基本概念
抽象工厂模式就是将多个不同的生产方法放在不同的工厂类中,让多个工厂类实现同一个接口,此时只需要通过不同的工厂类就可以进行不同实例的创建。
6.2 自定义SendFactory接口
6.3 自定义MailSendFactory类
6.4 自定义SmsSendFactory类
6.5 修改Computer类
6.6 分析图
6.7 案例分析
现在想要拓展程序生产新的产品,就只需要增加新的工厂类即可,不用违背开闭原则,同时每个工厂类对应一个产品,符合单一职责的原则。
更多精彩欢迎关注微信公众号《格子衫007》!
分类:
设计模式
好文要顶
关注我
收藏该文
微信分享
格子衫007
粉丝 -
0
关注 -
0
+加关注
0
0
升级成为会员
«
上一篇:
你的项目使用Optional了吗?
»
下一篇:
你的项目使用的是哪种配置文件?
posted @
2022-12-13 10:47
格子衫007
阅读(
110
) 评论(
0
)
编辑
收藏
举报
刷新页面
返回顶部
登录后才能查看或发表评论,立即
登录
或者
逛逛
博客园首页
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
相关博文:
·
设计模式之单例设计模式
·
Spring框架之IOC入门
·
设计模式-工厂方法模式
·
设计模式学习(二)工厂模式——工厂方法模式
·
工厂方法模式 (Factory Method Pattern)
阅读排行:
·
TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
·
Manus的开源复刻OpenManus初探
·
AI 智能体引爆开源社区「GitHub 热点速览」
·
三行代码完成国际化适配,妙~啊~
·
.NET Core 中如何实现缓存的预热?
公告
昵称:
格子衫007
园龄:
2年3个月
粉丝:
0
关注:
0
+加关注
<
2025年3月
>
日
一
二
三
四
五
六
23
24
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
我的标签
Java新特性
(3)
幂等性
(1)
多表连接
(1)
单例设计模式
(1)
随笔分类
Java基础(2)
Java新特性(3)
SpringBoot框架(1)
Spring框架(1)
设计模式(1)
数据库(2)
项目实战(1)
随笔档案
2022年12月(6)
2022年11月(5)
阅读排行榜
1. 多表连接(684)
2. 你的项目使用Optional了吗?(452)
3. 你的项目使用的是哪种配置文件?(345)
4. Java8新特性之方法引用(286)
5. 项目实战:并发下保证接口的幂等性(139)
评论排行榜
1. 你的项目使用Optional了吗?(2)
2. Java8新特性之方法引用(2)
推荐排行榜
1. 你的项目使用的是哪种配置文件?(2)
最新评论
1. Re:你的项目使用Optional了吗?
@海盗船长007 不错,学习了!...
--格子衫007
2. Re:你的项目使用Optional了吗?
最后这个写法也太不简洁了,用了Optional还不如不用了。应该这么写: public static Person getNameToUpperCaseOptional(Person person) ...
--海盗船长007
3. Re:Java8新特性之方法引用
@隆德尔 这两种技术非常相似,我认为下一个主流版本应该是Java17。...
--格子衫007
4. Re:Java8新特性之方法引用
除了能跨平台外,Java8的技术层次能与 .net framework3.5或4.0比么?感觉可能用java11以上版本可能更好点。
--隆德尔
点击右上角即可分享
SQL AI 助手
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?