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

推荐订阅源

博客园_首页
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
量子位
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
V
Visual Studio Blog
雷峰网
雷峰网
T
Tailwind CSS Blog
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale
有赞技术团队
有赞技术团队
博客园 - 叶小钗
Microsoft Azure Blog
Microsoft Azure Blog
T
The Blog of Author Tim Ferriss
U
Unit 42
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
阮一峰的网络日志
阮一峰的网络日志
Y
Y Combinator Blog

博客园 - 电机拖动

我晕,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