设计模式- 之我见---创造性(虚拟工厂)

本文介绍了一个使用抽象工厂模式创建不同类型产品的示例。通过定义一系列接口并实现这些接口,可以创建不同的产品族,如面条、香蕉等。该模式适用于需要创建一系列相关或依赖对象的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

/*

leftright by Tony

 

*/

//AbstractFactory.h

#ifndef AF_HH
#define AF_HH
#include "stdafx.h"
//enum Good{Noodle,Banana,CD,Hotdog,Food};
/////////////////////////////////////////////////

             /*<-虚拟工厂->*/

////////////////////////////////////////////////
class Noodle{};
class Banana{};
class CD{};
class Hotdog{};
class Food{};
class AFactory
{
public:
 virtual Noodle *MakeNoodle();
 virtual Banana *MakeBanana();
 virtual CD * MakeCD();
 virtual Hotdog *MakeHotdog();
 virtual Food * MakeFood();

};
class Shop
{
public :
 Shop();
 virtual ~Shop();
 virtual void Create(AFactory &);
private:
 Noodle *N;
 Banana *B;
 CD * C;
 Hotdog *H;
 Food * F;
};
#endif

 

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

 

// AbstractFactory.cpp : 定义控制台应用程序的入口点。
//抽象工厂

#include "stdafx.h"
#include "AbstractFactory.h"
Noodle *AFactory::MakeNoodle()
{
 return new Noodle();
}
Banana *AFactory::MakeBanana()
{
 return new Banana();
}
CD * AFactory::MakeCD()
{
 return new CD();
}
Hotdog *AFactory::MakeHotdog()
{
 return new Hotdog();
}
Food * AFactory::MakeFood()
{
 return new Food();
}
void Shop::Create(AFactory &a)
{
 this->B = a.MakeBanana();
 this->C = a.MakeCD();
 this->F = a.MakeFood();
 this->H = a.MakeHotdog();
 this->N = a.MakeNoodle();
}
Shop::~Shop()
{
 if (B!=NULL)
  delete B;
 
 if (C!=NULL)
  delete C;
 
 if (F!=NULL)
  delete F;
 
 if (H!=NULL)
  delete H;
 
 if (N!=NULL)
  delete N;

}
Shop::Shop()
{}
int _tmain(int argc, _TCHAR* argv[])
{
 AFactory f;
 Shop s;
 s.Create(f);

 return 0;
}

 

 

/*

leftright by Tony

 

*/

//////////////////有问题地方 ,还请指教...

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值