设计模式之工厂模式 练习

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

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

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

 

你可能感兴趣的:(设计模式)