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

推荐订阅源

T
The Blog of Author Tim Ferriss
Know Your Adversary
Know Your Adversary
P
Palo Alto Networks Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
K
Kaspersky official blog
L
LINUX DO - 热门话题
P
Proofpoint News Feed
P
Privacy & Cybersecurity Law Blog
Google DeepMind News
Google DeepMind News
Attack and Defense Labs
Attack and Defense Labs
Cisco Talos Blog
Cisco Talos Blog
AI
AI
L
LINUX DO - 最新话题
H
Heimdal Security Blog
Hacker News: Ask HN
Hacker News: Ask HN
Webroot Blog
Webroot Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The GitHub Blog
The GitHub Blog
I
Intezer
Blog — PlanetScale
Blog — PlanetScale
有赞技术团队
有赞技术团队
S
Securelist
博客园_首页
IT之家
IT之家
Schneier on Security
Schneier on Security
博客园 - 叶小钗
罗磊的独立博客
WordPress大学
WordPress大学
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
MongoDB | Blog
MongoDB | Blog
P
Proofpoint News Feed
阮一峰的网络日志
阮一峰的网络日志
A
Arctic Wolf
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
W
WeLiveSecurity
The Register - Security
The Register - Security
D
DataBreaches.Net
S
Security @ Cisco Blogs
Security Archives - TechRepublic
Security Archives - TechRepublic
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
腾讯CDC
Recorded Future
Recorded Future
NISL@THU
NISL@THU
N
News and Events Feed by Topic
T
Tailwind CSS Blog
N
News and Events Feed by Topic
Cyberwarzone
Cyberwarzone
T
Tor Project blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com

博客园 - 心雨无痕

升级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产品类不行吗?

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