设计模式【2.1】-- 简单工厂模式怎么演变成工厂方法模式?
还记得前面的简单工厂模式么?我们开了一个水果工厂FruitFactory
,生产三种水果Apple
,Pear
,Orange
。今天给大家讲讲工厂方法模式:
老板搞水果工厂赚了点小钱,准备扩大生产,每个工厂生产一种水果,各司其职,而不是把所有的产品类型都放到一个工厂中。
既然有多工厂,那我们和之前一样,搞一个水果工厂类FruitFactory
,把它搞成接口类。
水果类的定义还是一样,定义一个水果接口Fruit
:
水果分别如下,我直接写到一块去了:
既然有多个工厂。那我们分别定义多个工厂,对水果工厂类做不同的实现,分别生产苹果,雪梨,橙子。
测试代码如下:
运行结果:
上面的写法,如果后续还有生产不同的水果,或者不同的水果工厂,相对容易拓展。总结一下,工厂方法模式一共有以下的角色:
- 抽象工厂:提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法
getFruit()
来创建水果产品。 - 具体工厂:主要是实现抽象工厂中的抽象方法,创建具体的产品。
- 抽象产品:定义了产品规范,比如所有的水果共同的特性。
- 具体产品:实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。
那么工厂方法模式,相对简单工厂模式,有什么区别呢?
工厂方法模式,一种工厂对应一种产品,各司其职,如果产品很多的话,方便分开维护,特别是那种创建产品比较复杂的场景,而产品类型又比较多,这样就会显得很臃肿。
但是如果产品很少,而且创建过程相对简单的时候,感觉简单工厂模式已经足够,不需要特意为了使用一种设计模式而使用它,过度设计会带了很多不必要的麻烦。
【作者简介】:
秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使缓慢,驰而不息。这个世界希望一切都很快,更快,但是我希望自己能走好每一步,写好每一篇文章,期待和你们一起交流。
__EOF__

本文作者:秦怀杂货店
本文链接:https://www.cnblogs.com/Damaer/p/14317751.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Damaer/p/14317751.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库