前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之Factory 模式

设计模式之Factory 模式

作者头像
海盗船长
发布2021-12-07 16:04:53
2500
发布2021-12-07 16:04:53
举报
文章被收录于专栏:基础知识文章基础知识文章

1.模式功能

  1. 定义创建对象的接口,封装了对象的创建
  2. 使得具体化类的工作延迟到了子类中

2.为什么使用Factory 模式

1.为了提高内聚和松耦合,我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。

图1 factory模式结构示意图
图1 factory模式结构示意图

图1 factory模式结构示意图

2.Factory 模式不单是提供了创建对象的接口,其最重要的是延迟了子类的实例化

图2 factory模式结构示意图
图2 factory模式结构示意图

图2 factory模式结构示意图 图 2 中关键中 Factory 模式的应用并不是只是为了封装对象的创建,而是要把对象的创建放到子类中实现:Factory 中只是提供了对象创建的接口,其实现将放在 Factory 的子类ConcreteFactory 中进行。 ## 代码实现

“product.h”
代码语言:javascript
复制
#ifndef _PRODUCT_H
#define _PRODUCT_H
class Product{
public:
	virtual ~Product() = 0;
protected:
	Product();
};

class ConcreteProduct:public Product{
public:
	ConcreteProduct();
	~ConcreteProduct();
};
#endif
“product.cpp”
代码语言:javascript
复制
#include<iostream>
#include"product.h"
using namespace std;
Product::Product(){}
Product::~Product(){}

ConcreteProduct::ConcreteProduct(){
	cout << "ConcreteProduct" << endl;
}
ConcreteProduct::~ConcreteProduct(){
}
“factory.h”
代码语言:javascript
复制
#ifndef _FACTORY_H_
#define _FACTORY_H_
class Product;
class Factory
{
public:
	virtual ~Factory() = 0;
	virtual Product* CreateProduct() = 0;
protected:
	Factory();
private:
};
class ConcreteFactory :public Factory
{
public:
	~ConcreteFactory();
	ConcreteFactory();
	Product* CreateProduct();
protected:
private:
};
#endif
“factory.cpp”
代码语言:javascript
复制
#include<iostream>
#include"factory.h"
#include"product.h"
using namespace std;
Factory::Factory(){}
Factory::~Factory(){}
ConcreteFactory::ConcreteFactory()
{
	cout << "ConcreteFactory....." << endl;
}
ConcreteFactory::~ConcreteFactory()
{
}
Product* ConcreteFactory::CreateProduct()
{
	return new ConcreteProduct();
}
“test.cpp”
代码语言:javascript
复制
#include"factory.h"
#include"product.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
	Factory* fac = new ConcreteFactory();//基类
	Product* p = fac->CreateProduct();//派生类方法调用
	system("pause");
	return 0;
}
在这里插入图片描述
在这里插入图片描述

总结

Factory 提供的创建对象的接口封装(第一个功能),以及其将类的实例化推迟到子类(第二个功能) 都部分地解决了实际问题,对于对象的创建给予开发人员提供了很好的实现策略,但是Factory 模式仅仅局限于一类类(就是说 Product 是一类,有一个共同的基类)。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.模式功能
  • 2.为什么使用Factory 模式
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档