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

推荐订阅源

Engineering at Meta
Engineering at Meta
博客园_首页
H
Help Net Security
WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
B
Blog
I
InfoQ
SecWiki News
SecWiki News
T
Tailwind CSS Blog
Spread Privacy
Spread Privacy
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Vulnerabilities – Threatpost
N
Netflix TechBlog - Medium
P
Palo Alto Networks Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Vercel News
Vercel News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
K
Kaspersky official blog
M
MIT News - Artificial intelligence
S
Schneier on Security
T
Threat Research - Cisco Blogs
F
Fortinet All Blogs
Cyberwarzone
Cyberwarzone
Scott Helme
Scott Helme
aimingoo的专栏
aimingoo的专栏
Martin Fowler
Martin Fowler
MyScale Blog
MyScale Blog
The Cloudflare Blog
Recent Announcements
Recent Announcements
Security Latest
Security Latest
G
GRAHAM CLULEY
IT之家
IT之家
Y
Y Combinator Blog
The Last Watchdog
The Last Watchdog
腾讯CDC
Google DeepMind News
Google DeepMind News
V
V2EX
S
Securelist
TaoSecurity Blog
TaoSecurity Blog
B
Blog RSS Feed
S
SegmentFault 最新的问题
博客园 - 叶小钗
P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
Project Zero
Project Zero
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
F
Full Disclosure

博客园 - 心雨无痕

升级openssl和openssh linux配置LVM 杂七杂八 .net程序包含webbrowser插件时遇到的各种问题 mysql连接远程服务器很慢的解决方法 centos安装php需要注意的问题 centos配置nfs杂七杂八 iptables配置网络端口转发 桥接模式 适配器模式 单例模式 原型模式 简单工厂模式 建造者模式 ActionScript中Object和Dictionary的区别 FlashBuilder4.5破解方法 抽象工厂模式 设计模式浅见 了解下常见的开源协议
工厂方法模式
心雨无痕 · 2012-06-14 · via 博客园 - 心雨无痕

工厂方法模式用来定义一个创建产品的接口(抽象类),具体的产品创建工作由子类来实现,它是一种类的创建模式。

模式介绍

工厂方法模式分为4个角色:

1. 抽象工厂Creator,该角色定义了工厂类所必须具备的所有接口,在本模式中通常只有一个Creator角色类

2. 具体工厂ConcreteCreator,实际的工厂类,实现Creator中定义的接口并实际生成产品,应用将直接调用该角色以生成产品

3. 抽象产品角色Product,该角色定义了产品类所必须具备的接口

4. 具体产品角色ConcreteProduct,该角色实现了Product中定义的接口,它是应用所需要的真正的产品

上述角色中,一般具体工厂角色和具体产品角色一一对应,某个具体的产品由某个具体的工厂来创建。

为什么要用工厂方法模式

在可以应用简单工厂模式的场合,都可以使用工厂方法,简单工厂实际上可以说是工厂方法的简单版本。

具体的应用场合上来看,举个例子吧。

假设有个工厂F1生产一种产品P1,那么客户在使用产品时使用的方法是:

F1 f1 = new F1();
P1 p1 = f1.create();
..
Something.do(p1);
..
Other.do(p1);

如果客户又要用工厂F2生产的一种产品P2,那么客户就要大量的修改代码,包括Something和Other的方法签名都要修改成P2,这是一种巨大的负担。因此为了减轻这种负担,我们应该尽量少的修改代码实现,那么我们就抽象出P1和P2的抽象类P,抽象出F1和F2的抽象类F,那么上面的代码就变成了

F f = new F1();
P p = f.create();
..
Something.do(p);
..
Other.do(p);

客户需要用F2生产P2时,只需要修改最开始初始化的2句代码,把F1变成F2即可,最大化的减少了代码负担。

那么为什么要用工厂类来生产产品呢? 直接new产品类不行吗?

一般情况下,使用工厂类的原因一般是产品类有可能比较复杂,使用工厂类可以更好的组织产品,也使得产品类更加纯净,只做数据的保存即可。