工厂模式,是用工厂方法代替new操作的一种模式。其实也可以将其理解成为一个创建对象的工具类。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
<br>
### Ø 优点:
1) 一个调用者想创建一个对象,只要知道其名称就可以了。
2) 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
3) 屏蔽产品的具体实现,调用者只关心产品的接口。
<br>
### Ø 缺点:
每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。
<br>
### Ø 主要解决:
主要解决接口选择的问题。
<br>
### Ø 何时使用:
我们明确地计划不同条件下创建不同实例时。
<br>
### Ø 应用场景:
1. 日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。
2. 数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。
3. 设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。
<br>
### Ø 实现:
![](https://img.kancloud.cn/4b/7f/4b7f871118e056e61bb3d5bbd3b952cc_579x335.png)
接口类IApi.php
```
interface IApi{
public function draw();
}
```
业务类 classA.php
```
class classA implements IApi{
public function draw(){
echo 'classA';
}
}
```
业务类 classB.php
```
class classB implements IApi{
public function draw(){
echo 'classB';
}
}
```
API调用 index.php
```
class Factory_Demo{
public function index($type=0)
{
if($type == 1 ){
$obj = new App\factory\classA();
}else{
$obj = new App\factory\classB();
}
$obj->draw();
}
}
$obj = new Factory_Demo();
$obj ->index(2);
```
- 概述说明
- 数据结构
- 数组
- 栈
- 队列
- 链表
- 树
- 堆
- 图
- 常用算法
- 排序算法
- 选择排序
- 冒泡排序
- 插入排序
- 快速排序
- 归并排序
- 希尔排序
- 堆排序
- 计数排序
- 基数排序
- 二分查找
- 贪心算法
- 回溯算法
- 剪枝算法
- 分支限界法
- 动态规划
- 设计模式
- 工厂模式
- 抽象工厂模式
- 单例模式
- 建造者模式
- 原型模式
- 适配器模式
- 桥接模式
- 过滤器模式
- 组合模式
- 装饰器模式
- 外观模式
- 享元模式
- 代理模式
- 责任链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 空对象模式
- 策略模式
- 模板模式
- 访问者模式
- 并发
- 多线程
- 线程安全
- 一致性、事务
- 锁
- 操作系统
- 计算机原理
- CPU
- 进程
- 线程
- 协程
- Linux
- 运维
- 常规监控
- 统计分析
- 自动化运维
- 测试
- 文档管理
- 日志管理
- 中间件
- Web Server
- Nginx
- Apache
- Tomcat
- 缓存
- 消息队列
- 网络协议
- 协议
- OSI 七层协议
- TCP/IP
- HTTP
- HTTP2.0
- HTTPS
- 网络模型
- Epoll
- kqueue
- 数据库
- 基础理论
- MySQL
- NoSQL
- 搜索引擎
- Elasticsearch
- sphinx
- Lucene
- 性能
- 性能优化方法论
- 容量评估
- CDN 网络
- 连接池
- 性能调优
- 安全
- web 安全
- XSS
- CSRF
- SQL 注入
- 脚本注入
- 漏洞扫描工具
- 验证码
- DDoS 防范
- 用户隐私信息保护
- 加密解密
- 对称加密
- 哈希算法
- 非对称加密
- 服务器安全
- 数据安全
- 网络隔离
- 授权、认证
- RBAC
- OAuth2.0
- 单点登录(SSO)
- JWT
- 开源框架
- 开源协议
- 日志框架
- ORM
- PHP开源框架
- 分布式集群
- 扩展性设计
- 稳定性高可用
- 数据库扩展
- 分布式一致
- 分布式文件系统
- 开发模式
- DDD(Domain-driven Design - 领域驱动设计)
- Actor 模式
- 响应式编程
- DODAF2.0
- Serverless
- Service Mesh
- 项目管理
- 架构评审
- 重构
- 代码规范
- 代码 Review
- 看板管理
- 敏捷开发
- 极限编程
- PDCA 循环质量管理
- FMEA管理模式
- 资讯
- 行业资讯
- 公众号列表
- 博客
- 综合门户、社区
- 技术资源
- 开源资源
- 手册、文档、教程
- 在线课堂
- 代码托管
- 云服务商