设计模式 Design Parttern ——抽象工厂Factory Method http://blog.csdn.net/leeidea 1:头文件 #ifndef _FACTORY_METHOD_H_VANEY_ #define _FACTORY_METHOD_H_VANEY_ #include <iostream> using namespace std; /****************************************************************** 名称 :FactoryMethod.h 版本 :1.00 描述 :演示工厂方法的概念 作者 :vaney.li@gmail.com http://blog.csdn.net/leeidea 日期 :2010年10月14日 版权 :vaney.li@gmail.com http://blog.csdn.net/leeide ******************************************************************/ /* 官方解释:The Factory Method defines an interface for creating objects, but lets subclasses decide which classes to instantiate. 我的理解:如果使用C++,工厂方法就是一个简单的继承和多态的关系。可以尝试用C语言的实现 我的应用: */ //工厂方法处理的逻辑基类 class CProduct { public: CProduct(int data) { cout << "CProduct()" << endl; } virtual ~CProduct() { cout << "~CProduct()" << endl; } public: //需要子类实现的方法 virtual int Make(int data) = 0; }; //具体的处理逻辑 class CProductA : public CProduct { public: CProductA(int data):CProduct(data) { cout << "CProductA()" << endl; } virtual ~CProductA() { cout << "~CProductA()" << endl; } public: virtual int Make(int data) { cout << "CProductA Make" << endl; return 1; } }; //具体的处理逻辑 class CProductB : public CProduct { public: CProductB(int data):CProduct(data) { cout << "CProductB()" << endl; } virtual ~CProductB() { cout << "~CProductB()" << endl; } public: virtual int Make(int data) { cout << "CProductB Make" << endl; return 1; } }; //抽象工厂方法 class CFactoryMethod { public: CFactoryMethod() { cout << "CFactoryMethod()" << endl; } virtual ~CFactoryMethod() { cout << "~CFactoryMethod()" << endl; } public: //需要子类实现的方法 virtual CProduct* Process(int data) = 0; }; //具体工厂方法 class CFactoryMethodA : public CFactoryMethod { public: CFactoryMethodA() { cout << "CFactoryMethodA()" << endl; } virtual ~CFactoryMethodA() { cout << "~CFactoryMethodA()" << endl; } public: virtual CProduct* Process(int data) { cout << "CFactoryMethodA Process" << endl; return new CProductA(data); } }; //具体工厂方法 class CFactoryMethodB : public CFactoryMethod { public: CFactoryMethodB() { cout << "CFactoryMethodB()" << endl; } virtual ~CFactoryMethodB() { cout << "~CFactoryMethodB()" << endl; } public: virtual CProduct* Process(int data) { cout << "CFactoryMethodB Process" << endl; return new CProductB(data); } }; #define C_API extern "C" //用户 C_API int UsingFM(); #endif 2:源文件 #include "FactoryMethod.h" C_API int UsingFM() { //如果要使用工厂方法A CFactoryMethod* methodA = new CFactoryMethodA(); CProduct* ptA = methodA->Process(10); //如果要使用工厂方法B CFactoryMethod* methodB = new CFactoryMethodB(); CProduct* ptB = methodB->Process(10); return 1; } 2:用户文件main.c extern int UsingFM(); //系统默认入口 int _tmain(int argc, _TCHAR* argv[]) { return UsingFM(); } http://blog.csdn.net/leeidea