惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Darknet – Hacking Tools, Hacker News & Cyber Security
Jina AI
Jina AI
博客园_首页
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
S
SegmentFault 最新的问题
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
Forbes - Security
Forbes - Security
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
The Register - Security
The Register - Security
N
News | PayPal Newsroom
S
Security Archives - TechRepublic
量子位
Cisco Talos Blog
Cisco Talos Blog
V
V2EX
C
Cisco Blogs
The Cloudflare Blog
Stack Overflow Blog
Stack Overflow Blog
L
LangChain Blog
Scott Helme
Scott Helme
S
Securelist
Security Latest
Security Latest
爱范儿
爱范儿
TaoSecurity Blog
TaoSecurity Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
I
Intezer
L
LINUX DO - 最新话题
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Check Point Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
美团技术团队
Know Your Adversary
Know Your Adversary
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
PCI Perspectives
PCI Perspectives
月光博客
月光博客
T
Tailwind CSS Blog
Cloudbric
Cloudbric
小众软件
小众软件
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
K
Kaspersky official blog
D
DataBreaches.Net
博客园 - 【当耐特】
有赞技术团队
有赞技术团队

博客园 - 电机拖动

我晕,DELL邮寄WIN7升级光盘的服务是不是太过分了? 史记.饭岛爱列传(转) [翻译]JavaScript性能测试 新手可以借助Profiler学习TSQL 如果《24》在94年播出的话…… 两个当年的MS广告(暴笑) SQL Server中的两个有用的存储过程 重新回归 [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之四十九:使用SqlDataSource插入、更新以及删除数据 [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之四十八:在SqlDataSource中使用参数化查询 - 电机拖动 [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之四十七:使用SqlDataSource控件查询数据 [翻译]Scott Mitchell的ASP.NET2.0数据教程中文版索引(Canceled!!) Evanescence - Origin [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十五:在GridView的页脚中显示统计信息 [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十四:使用FormView 的模板 [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十三:在DetailsView控件中使用TemplateField [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十二:在GridView控件中使用TemplateField [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之二:创建一个业务逻辑层 [SQLServer2000]TEMPDB丢失或TEMPDB文件损坏的服务器恢复
白话设计模式——FactoryMethod
电机拖动 · 2005-10-31 · via 博客园 - 电机拖动
 

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

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

来看一个类图。

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

FactoryMethod

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

回到目录
上一篇:Builder
下一篇:Prototype