设计模式-创建型模式之 Factory Method(工厂方法)

意图:定义一个创建对象的接口,让子类决定实例化哪个类,使得一个类的实例化延迟到其子类。又叫虚构造器(Virtual Constructor),算是最基本的一个模式


一个应用实例:

#include <iostream>
using namespace std;
class Operation  //工厂方法创建的对象(产品)的接口
{
public:
	int num1, num2;
	virtual int GetResult()
	{
		return 0;
	};
};

class Add:public Operation   //一个工厂方法创建的对象(产品)的实现
{
public:
	int GetResult()
	{
		return num1 + num2;
	}
};
//可添加更多的实现
class Factory  //工厂方法
{
public:
	virtual Operation* CreateOperation() = 0;
};

class AddFactory:public Factory  //具体的工厂
{
public:
	Operation* CreateOperation()
	{
		return new Add();
	}

};

int main()
{
	Factory* f = new AddFactory();
	Operation* p = f->CreateOperation();
	p->num1 = 5;
	p->num2 = 5;
	cout << p->GetResult();
	delete f;
	delete p;
}
使用模板避免创建工厂子类的方法:

#include <iostream>
using namespace std;
class Operation  //工厂方法创建对象的接口
{
public:
	int num1, num2;
	virtual int GetResult()
	{
		return 0;
	};
};

class Add:public Operation   //一个工厂方法创建的对象的实现
{
public:
	int GetResult()
	{
		return num1 + num2;
	}
};
//可以添加更多的实现

class Factory  //工厂方法
{
public:
	virtual Operation* CreateOperation() = 0;
};

template<class TheProduct>
class StandardFactory:public Factory  //具体的工厂
{
public:
	Operation* CreateOperation()
	{
		return new TheProduct();
	}

};

int main()
{
	StandardFactory<Add>* f = new StandardFactory<Add>();
	Operation* p = f->CreateOperation();
	p->num1 = 5;
	p->num2 = 5;
	cout << p->GetResult();
	delete f;
	delete p;
}


效果:

1 使得不再将特定应用的类绑定在代码中,代码只需要处理产品的接口

2 当客户仅仅为了创建一个特定的产品对象时,就不得不创建新的工厂类的子类。使用模板可以避免这个缺点

相关模式:

1 Abstract Factory经常使用工厂方法来实现

2 Template Methods经常调用工厂方法


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值