设计模式之Factory 模式

1.模式功能

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

2.为什么使用Factory 模式

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

图1 factory模式结构示意图

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

图2 factory模式结构示意图
图 2 中关键中 Factory 模式的应用并不是只是为了封装对象的创建,而是要把对象的创建放到子类中实现:Factory 中只是提供了对象创建的接口,其实现将放在 Factory 的子类ConcreteFactory 中进行。 ## 代码实现
“product.h”
#ifndef _PRODUCT_H
#define _PRODUCT_H
class Product{
public:
	virtual ~Product() = 0;
protected:
	Product();
};

class ConcreteProduct:public Product{
public:
	ConcreteProduct();
	~ConcreteProduct();
};
#endif
“product.cpp”
#include<iostream>
#include"product.h"
using namespace std;
Product::Product(){}
Product::~Product(){}

ConcreteProduct::ConcreteProduct(){
	cout << "ConcreteProduct" << endl;
}
ConcreteProduct::~ConcreteProduct(){
}

“factory.h”
#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”
#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”
#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 是一类,有一个共同的基类)。

  • 42
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 70
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 70
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值