首页 > 代码库 > 设计模式之工厂模式 练习

设计模式之工厂模式 练习

设计模式中 最基本的工厂模式

感觉就是根据输入的类型决定选择何种类与进行何种操作。

跟面向过程中输入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;}