随笔 - 39,  文章 - 4,  评论 - 256,  阅读 - 14万
 

“工厂方法”跟“抽象工厂”有些相似,这一点从名称上也是可以看出来的。“抽象工厂”主要是说生产一个系列的产品的工厂类,而“工厂方法”则是说生产一个产品的方法,我们完全可以把“抽象工厂”当作是一群“工厂方法”组合而成的,事实上,“抽象工厂”模式常常建立在“工厂方法”模式的基础上。

好了,来看一个例子。广本的冲压科里面,有几台巨型的冲压机,它们外观是一摸一样的,其实功能也一样,都是用来将钢板冲压成型的,但它们生产的产品却不一样,有的生产车顶,有的生产车门,有的生产发动机盖……冲压机的生产厂家不会管你生产什么东西的,只是给你这样一台冲压机,要生产什么完全由你自己放进不同的模具而已。也就是说,广本要某台冲压机生产Fit的车门的话,只需要将Fit的车门模具放入其中就可以了,冲压机不会管什么模具的,只管哐当哐当的压就是了。

来看一个类图。


 

图中,我们可以看到,拥有不同模具的冲压机可以生产不同的产品。而且,冲压机在投入生产之前并不知道它要生产什么东西,只有在给定了模具后才知道要生产什么东西。好了,我们来看看把类图转换成代码的样子。


FactoryMethod


说白了,抽象工厂就是由工厂方法组成的(这个表达也许不够准确)。抽象工厂主要用于创建一系列相关的产品;而工厂方法则主要用于让某一个类处理不同的产品,且这个产品是由子类来决定的。在冲压机的例子中,没有模具的冲压机就是一个抽象类,加上模具就是一个具体的子类的,而模具的抽象就是工厂方法,加上不同的模具就等于为冲压机实现了不同的子类。



回到目录
上一篇:Builder
下一篇:Prototype
posted on   电机拖动  阅读(1126)  评论(1编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示