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

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
CERT Recently Published Vulnerability Notes
C
Cybersecurity and Infrastructure Security Agency CISA
P
Proofpoint News Feed
Security Latest
Security Latest
P
Privacy International News Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
AI
AI
Cisco Talos Blog
Cisco Talos Blog
K
Kaspersky official blog
S
Secure Thoughts
PCI Perspectives
PCI Perspectives
Simon Willison's Weblog
Simon Willison's Weblog
D
DataBreaches.Net
GbyAI
GbyAI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
大猫的无限游戏
大猫的无限游戏
T
Tailwind CSS Blog
The Cloudflare Blog
阮一峰的网络日志
阮一峰的网络日志
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
罗磊的独立博客
V
Visual Studio Blog
aimingoo的专栏
aimingoo的专栏
H
Hackread – Cybersecurity News, Data Breaches, AI and More
IT之家
IT之家
V
V2EX
Last Week in AI
Last Week in AI
有赞技术团队
有赞技术团队
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tenable Blog
T
Threat Research - Cisco Blogs
T
Troy Hunt's Blog
V2EX - 技术
V2EX - 技术
S
Security @ Cisco Blogs
Security Archives - TechRepublic
Security Archives - TechRepublic
Project Zero
Project Zero
The GitHub Blog
The GitHub Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
L
Lohrmann on Cybersecurity
F
Full Disclosure
H
Help Net Security
博客园 - Franky
Stack Overflow Blog
Stack Overflow Blog
N
Netflix TechBlog - Medium
Engineering at Meta
Engineering at Meta
A
Arctic Wolf
O
OpenAI News
S
Securelist

博客园 - 心雨无痕

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

简单工厂模式也可以成为静态工厂模式,它的目的是根据提供给它的数据,返回可能的许多个具有相同基类的类中的某个类的实例,方法签名返回的是基类的实例。

为什么要使用这个模式

    当需要使用统一的接口来根据不同的输入返回相同基类的不同类的实例时,使用静态工厂。静态工厂模式是抽象工厂的一个简单应用,抽象工厂模式定义抽象类或接口来抽象接口方法,而简单工厂则使用一个方法来实现根据参数返回相应应用类。

    通俗的来说,简单工厂模式就是一堆if语句的整合物,比如有类B、C、D都继承A,经常需要根据某个参数来获取BCD的实例,如果不用模式,那么就是如下代码

    A a;

    if(...) a = new B();

    else if(...) a = new C();

    else a = new D();

    大量此类代码会导致代码臃肿并且不易管理和扩展,使用简单工厂可以避免这个问题,所有此类代码都写到工厂类中。

    当然,使用一个全局的静态方法也是一种解决方案,但全局的静态方法不符合面向对象的基本原则,并且不易管理。

应用例子

1. 抽象类Base,定义了一类业务逻辑所需的接口方法

2. 实体类A、B、C,继承了Base类,实现了具体的业务逻辑

3. 工厂类F定义了方法getBase(param)来根据param参数返回Base类的实例,具体实现上根据参数是构造A、B、C的实例并返回,一般情况下类F本身是不保存状态的,因此getBase大多数是静态方法