C++设计模式-抽象工厂模式

抽象工厂模式-对象创建模式

引言:
为了解决工厂模式可能带来的系统大量开销,我们可以进一步进行抽象,将一类对象创建放在一个工厂中。

类图:
抽象工厂类图
类图各个部分介绍:
抽象工厂(Abstract Factory)角色:它声明了一组用于创建一族产品的
方法,每一个方法对应一种产品。
具体工厂(Concrete Factory)角色:它实现了在抽象工厂中声明的创
建产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品
都位于某个产品等级结构中。
抽象产品(Abstract Product)角色:它为每种产品声明接口,在抽象
产品中声明了产品所具有的业务方法。
具体产品(Concrete Product)角色:它定义具体工厂生产的具体产品
对象,实现抽象产品接口中声明的业务方法。

案例:
案例关系图:
案例关系图
案例代码:

#include<iostream>
using namespace std;
//苹果抽象类,供具体产地苹果实现
class AbstractApple
{
public:
virtual void getName() = 0;
};
//⾹香蕉抽象类,供具体产地⾹香蕉实现
class AbstractBanana
{
public:
			virtual void getName() = 0;
};
class ChinaApple : public AbstractApple
{
public: 
			virtual void getName()
			{
				cout << "中国苹果" << endl;
			}
};
class USAApple : public AbstractApple
{
public :
			virtual void getName()
			{
				cout << "美国苹果" << endl;
			}
};
class ChinaBanana : public AbstractBanana
{
public :
			virtual void getName()
			{
				cout << "中国⾹香蕉" << endl;
			}
};
class USABanana : public AbstractBanana
{
public: 
			virtual void getName()
			{
				cout << "美国⾹香蕉" << endl;
			}
};
//抽象的⼯工⼚厂类,供具体产品族的⼯工⼚厂实现
class AbstractFactory
{
public:
			virtual AbstractApple* createApple() = 0;
			virtual AbstractBanana * createBanana() = 0;
};
class ChinaFactory : public AbstractFactory
{
public:
			virtual AbstractApple* createApple()
			{
				return new ChinaApple;
			}
		virtual AbstractBanana * createBanana()
		{
			return new ChinaBanana;
		}
};
class USAFactory : public AbstractFactory
{
public:
			virtual AbstractApple* createApple()
			{
				return new USAApple;
			}
			virtual AbstractBanana * createBanana()
			{
				return new USABanana;
			}
};
int main(void)
{
		//现在准备要⼀一个中国的苹果,中国的⾹香蕉
		AbstractApple* apple = NULL;
		AbstractBanana* banana = NULL;
		AbstractFactory* factory = NULL;
		factory = new ChinaFactory;
		//中国的苹果
		apple = factory-­‐>createApple();
		//中国的⾹香蕉
		banana = factory-­‐>createBanana();
		apple-­‐>getName();
		banana-­‐>getName();
		delete apple;
		delete banana;
		delete factory;
		return 0;
}

小结:
以上案例中,我们将一类的对象实例化创建归结到一个具体的工厂中,之后创建一类的对象只需要调用对应的那一类对象创建工厂对象就可以了,当实例化对象增加时减少了系统的额外开销。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值