//Product.h
#ifndef _PRODUCT_H #define _PRODUCT_H class Product { public: virtual ~Product() = 0; protected: Product(); private: ... ... }; class ConcreteProduct: Product { public: ConcreteProduct(); ~ConcreteProduct(); protected: ... ... private: ... ... }; #endif //Product.cpp #include "Product.h" #include <iostream> using namespace std; Product::Product() {} Product::~Product() {} ConcreteProduct::ConcreteProduct() { cout<<"ConcreteProduct..." << endl; } ConcreteProduct::~ConcreteProduct() {} //Factory.h #ifndef _FACTORY_H #define _FACTORY_H class Product; class Factory { public: virtual ~Factory() = 0; virtual Product * ConcreteProduct() = 0; protected: Factory(); private: ... ... }; class ConcreteFactory: Factory { public: ConcreteFactory(); ~ConcreteFactory(); Product * ConcreteProduct(); protected: ... ... private: ... ... }; #endif //Factory.cpp#include "Factory.h" #include "Product.h" #include <iostream> using namespace std; Factory::Factory() {} Factory::~Factory() {} ConcreteFactory::ConcreteFactory() { cout << "ConcreteFactory..." << endl; } ConcreteFactory::~ConcreteFactory() {} Product * ConcreteFactory::ConcreteProduct() { return new ConcreteProduct(); } //main.cpp #include "Product.h" #include "Factory.h" #include <iosteam> using namespace std; int main(int argc, char *argv[]) { Factory *fac = new ConcreteFactory(); Product *p = fac->ConcreteProduct(); return 0; }