【设计模式】创建型模式-Factory模式
# 功能
- 定义创建对象的接口,封装了对象的创建
- 使得具体化类的工作延迟到了子类中
# 解决
- 主要解决:解决接口选择问题
- 何时使用:明确地计划不同条件下创建不同实例时
- 关键代码:创建过程在其子类执行
# 优缺点
- 优点:
- 创建对象时只需知道创建名称即可
- 扩展性高
- 封装性好
- 缺点:
- 增加复杂度
- 增加了系统具体类的依赖
# 应用场景
- 应用实例:
- 你要做一个披萨,我只需要知道披萨的名字,具体怎么做,交给披萨工厂(自己创建)创建即可。
- 你需要一辆车,你只需要知道车的名字,直接从工厂里去获取,至于汽车里面内部怎么实现,则不需要关心
- 使用场景:
- 日志记录器
- 数据库访问
- 设计一个链接服务器的框架,需要三个协议("POP3"、"IMAP"、"HTTP"),可以把这三个作为产品类,共同实现一个接口。
- 注意事项:复杂对象适合使用工厂模式,而简单对象使用工厂模式反而会增加复杂度
# 简单示例代码部分
Factory.hpp
#ifndef _FACTORY_H_
#define _FACTORY_H_
#include <iostream>
class Product{
public:
virtual ~Product(){};
Product(){}
};
class ConcreteProduct:public Product{
public:
ConcreteProduct(){
std::cout<<"ConcreteProduct...."<<std::endl;
}
};
class Factory{
public:
virtual ~Factory(){};
virtual Product* CreateProduct()=0;
Factory(){}
};
class ConcreteFactory:public Factory{
public:
ConcreteFactory(){
std::cout<<"ConcreteFactory...."<<std::endl;
}
Product* CreateProduct(){
return new ConcreteProduct();
}
};
#endif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
main.cpp
#include "Factory.hpp"
int main(void){
Factory* fac = new ConcreteFactory();
Product* p = fac->CreateProduct();
return 0;
}
1
2
3
4
5
6
7
2
3
4
5
6
7
编辑 (opens new window)
上次更新: 2022/05/18, 15:47:37