设计模式之工厂模式 练习
设计模式中 最基本的工厂模式
感觉就是根据输入的类型决定选择何种类与进行何种操作。
跟面向过程中输入1则执行func1();输入2则执行func2()基本一致的想法
#include <iostream>
using namespace std;
enum eShoeType{ leather = 0,rubber};
class CShoe{
public:
virtual void What() = 0;
};
class CLeatherShoe : public CShoe
{
public:
void What() {cout << "I am leather shoe." << endl;}
};
class CRubberShoe : public CShoe
{
public:
void What() {cout << "I am rubber shoe." << endl;}
};
class CShoeFactory
{
public:
CShoe* GetShowInstance(eShoeType type)
{
cout << "工厂生产鞋子ing..." << endl;
switch(type)
{
case leather:
return new CLeatherShoe();
case rubber:
return new CRubberShoe();
default:
return NULL;
}
}
};
void TestWithCpp()
{
CShoeFactory factory;
CShoe* pShoe = NULL;
pShoe = factory.GetShowInstance(leather);
if(NULL != pShoe)
{
pShoe->What();
delete pShoe;
pShoe = NULL;
}
pShoe = factory.GetShowInstance(rubber);
if(NULL != pShoe)
{
pShoe->What();
delete pShoe;
pShoe = NULL;
}
}
////////////////////////////////////////////////////////
typedef struct SHOE{
int type;
void (*print_shoe)(struct SHOE*);
}Shoe;
void PrintLeatherShoe(Shoe* pShoe)
{
if(NULL != pShoe)
printf("I am leather shoe \n");
}
void PrintRubberShoe(Shoe* pShoe)
{
if(NULL != pShoe)
printf("I am rubber shoe \n");
}
Shoe* FactoryShoe(int type)
{
Shoe* pShoe = NULL;
pShoe = (Shoe*)malloc(sizeof(Shoe));
if(NULL == pShoe)
return NULL;
memset(pShoe,0,sizeof(Shoe));
if(leather == type)
{
pShoe->type = type;
pShoe->print_shoe = PrintLeatherShoe;
}else if( rubber == type)
{
pShoe->type = type;
pShoe->print_shoe = PrintRubberShoe;
}else
{
free(pShoe);
pShoe = NULL;
return NULL;
}
return pShoe;
}
void TestWithC()
{
printf("\n\n 测试C版本工厂模式\n");
Shoe* pShoe = FactoryShoe(leather);
if(NULL != pShoe)
{
pShoe->print_shoe(pShoe);
free(pShoe);
pShoe = NULL;
}
pShoe = FactoryShoe(rubber);
if(NULL != pShoe)
{
pShoe->print_shoe(pShoe);
free(pShoe);
pShoe = NULL;
}
pShoe = FactoryShoe(994);
if(NULL != pShoe)
{
pShoe->print_shoe(pShoe);
free(pShoe);
pShoe = NULL;
}
}
////////////////////////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
TestWithCpp();
TestWithC();
return 0;
}
我的 c++ 交流群 324164944
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
浙公网安备 33010602011771号