#include " iostream " using namespace std; // 抽象类部分------------------因为不想写太多类我直接把抽象类实例化了 class CRoad ... {public: virtual void RoadFunction() ...{ cout<<"RoadFunction "<<endl; }} ; class CBuilding ... {public: virtual void BuildingFunction() ...{ cout<<"BuildingFunction "<<endl; }} ; class CTunnel ... {public: virtual void TunnelFunction() ...{ cout<<"TunnelFunction "<<endl; } } ; class CJungle ... {public: virtual void JungleFunction() ...{ cout<<"JungleFunction "<<endl; }} ; class CFactory ... {public: virtual CRoad* CreateRode(); virtual CBuilding* CreateBuilding(); virtual CTunnel* CreateTunnel(); virtual CJungle* CreateJungle(); } ;CRoad * CFactory::CreateRode() ... { return new CRoad();} CBuilding * CFactory::CreateBuilding() ... { return new CBuilding();} CTunnel * CFactory::CreateTunnel() ... { return new CTunnel();} CJungle * CFactory::CreateJungle() ... { return new CJungle();} // 具体类部分 class CModernRode: public CRoad ... {public: void RoadFunction() ...{ cout<<"ModernRoadFunction "<<endl; }} ; class CModernBuilding: public CBuilding ... {public: void BuildingFunction() ...{ cout<<"ModernBuildingFunction "<<endl; }} ; class CModernTunnel: public CTunnel ... {public: void TunnelFunction() ...{ cout<<"ModernTunnelFunction "<<endl; }} ; class CModernJungle: public CJungle ... {public: void JungleFunction() ...{ cout<<"ModernJungleFunction "<<endl; }} ; class CModernFactory: public CFactory ... {public: CRoad* CreateRode(); CBuilding* CreateBuilding(); CTunnel* CreateTunnel(); CJungle* CreateJungle(); } ;CRoad * CModernFactory::CreateRode() ... { return new CModernRode();} CBuilding * CModernFactory::CreateBuilding() ... { return new CModernBuilding();} CTunnel * CModernFactory::CreateTunnel() ... { return new CModernTunnel();} CJungle * CModernFactory::CreateJungle() ... { return new CModernJungle();} // 以下CModernFactory类方法的几个实现类似 /**/ /*************************************/ // =============================================== // 下面是客户程序 class CGameManager ... {private: CFactory* factory; CRoad* Rode; CTunnel* Tunnel; CJungle* Jungle; CBuilding* Building;public: CGameManager(CFactory* factory) ...{ this->factory = factory; } void BuildGame() ...{ this->Rode = factory->CreateRode(); this->Building = factory->CreateBuilding(); this->Tunnel = factory->CreateTunnel(); this->Jungle = factory->CreateJungle(); } void Run() ...{ Rode->RoadFunction(); Tunnel->TunnelFunction(); Jungle->JungleFunction(); Building->BuildingFunction(); }} ; int main( int argc, char * argv[]) ... { CFactory *pfactory = new CModernFactory(); CGameManager game1(pfactory); game1.BuildGame(); game1.Run(); return 0;}