class Product{public: virtual ~Product() {} virtual void DoSomething()=0;};class ProductA : public Product{public: ProductA() {} ~ProductA() {} virtual void DoSomething();};class ProductB : public Product{public: ProductB() {} ~ProductB() {} virtual void DoSomething();};class ProductC : public Product{public: ProductC() {} ~ProductC() {} virtual void DoSomething();};void ProductA::DoSomething(){ cout<<"ProductA::DoSomething"<CreateProduct(); pProduct->DoSomething(); DESTROY(pFactory); DESTROY(pProduct); pFactory = new FactoryB; pProduct = pFactory->CreateProduct(); pProduct->DoSomething(); DESTROY(pFactory); DESTROY(pProduct); pFactory = new FactoryC; pProduct = pFactory->CreateProduct(); pProduct->DoSomething(); DESTROY(pFactory); DESTROY(pProduct); return 0;}