代码如下: /* 02.26.2009 www.gaimo.net ccsdu2004@yahoo.com.cn */ #include <iostream> #include <memory> using namespace std; class Product { public: virtual ~Product(){} virtual void Effect() = 0; }; class Tank : public Product { public: virtual void Effect() { cout<<"坦克"<<endl; } }; class Dog: public Product { public: virtual void Effect() { cout<<"德国狗"<<endl; } }; class SubMarine: public Product { public: virtual void Effect() { cout<<"中国潜艇"<<endl; } }; class PhantomTank :public Tank { public: virtual void Effect() { cout<<"幻影坦克"<<endl; } }; class Factory { public: virtual ~Factory(){} virtual Product* CreateObject() = 0; protected: auto_ptr<Product> ptr; }; class TankFactory : public Factory { public: virtual Product* CreateObject() { cout<<"坦克公司生产了一个: "; ptr.reset(new Tank); return ptr.get(); } virtual ~TankFactory(){} }; class DogFactory : public Factory { public: virtual Product* CreateObject() { cout<<"狗基地生产了一个: "; ptr.reset(new Dog); return ptr.get(); } virtual ~DogFactory(){} }; class SubMarineFactory : public Factory { public: virtual Product* CreateObject() { cout<<"船厂生产了一个:"; ptr.reset(new SubMarine); return ptr.get(); } virtual ~SubMarineFactory(){} }; class PhantomTankFactory : public TankFactory { public: virtual Product* CreateObject() { cout<<"坦克公司生产了一个:"; ptr.reset(new PhantomTank); return ptr.get(); } virtual ~PhantomTankFactory(){} }; int main() { TankFactory tankFactory; tankFactory.CreateObject()->Effect(); DogFactory dogFactory; dogFactory.CreateObject()->Effect(); SubMarineFactory subMarineFactory; subMarineFactory.CreateObject()->Effect(); PhantomTankFactory phantomTankFactory; phantomTankFactory.CreateObject()->Effect(); system("PAUSE"); return 0; }