设计模式中 最基本的工厂模式
感觉就是根据输入的类型决定选择何种类与进行何种操作。
跟面向过程中输入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