base_product.h
#ifndef PRODUCT_H #define PRODUCT_H #include <string> using namespace std; // 汽车接口 class ___Car { public: virtual string Produce() = 0; // 汽车名称 protected: private: }; #endif // PRODUCT_Hbase_factory.h
#ifndef FACTORY_H #define FACTORY_H #include "base_product.h" // 工厂接口 class Car_Factory { public: virtual ___Car* Create_Car() = 0; // 生产汽车 protected: private: }; #endif // FACTORY_Hinheritance_product.h
#ifndef CONCRETE_PRODUCT_H #define CONCRETE_PRODUCT_H #include "base_product.h" // 奔驰汽车 class BenzCar : public ___Car { public: string Produce() { return "Benz Car"; } protected: private: }; // 宝马汽车 class BmwCar : public ___Car { public: string Produce() { return "Bmw Car"; } protected: private: }; // 奥迪汽车 class AudiCar : public ___Car { public: string Produce() { return "Audi Car"; } protected: private: }; #endif // CONCRETE_PRODUCT_Hinheritance_factory.h
#ifndef CONCRETE_FACTORY_H #define CONCRETE_FACTORY_H #include "base_factory.h" #include "inheritance_product.h" // 奔驰工厂 class BenzFactory : public Car_Factory { public: ___Car* Create_Car() { return new BenzCar; } protected: private: }; // 宝马工厂 class BmwFactory : public Car_Factory { public: ___Car* Create_Car() { return new BmwCar; } protected: private: }; // 奥迪工厂 class AudiFactory : public Car_Factory { public: ___Car* Create_Car() { return new AudiCar; } protected: private: }; #endif // CONCRETE_FACTORY_Hmain.cpp
#include "inheritance_factory.h" #include "base_product.h" #include <iostream> #ifndef SAFE_DELETE #define SAFE_DELETE(address) { if(address){delete(address); (address)=NULL;} } #endif int main() { Car_Factory* car_factory_address = NULL; ___Car* car_address = NULL; // 奔驰 car_factory_address = new BenzFactory; car_address = car_factory_address->Create_Car(); cout << car_address->Produce() << endl; SAFE_DELETE(car_address); SAFE_DELETE(car_factory_address); // 宝马 car_factory_address = new BmwFactory; car_address = car_factory_address->Create_Car(); cout << car_address->Produce() << endl; SAFE_DELETE(car_address); SAFE_DELETE(car_factory_address); // 奥迪 car_factory_address = new AudiFactory; car_address = car_factory_address->Create_Car(); cout << car_address->Produce() << endl; SAFE_DELETE(car_address); SAFE_DELETE(car_factory_address); getchar(); return 0; }出处参考:http://blog.csdn.net/liang19890820/article/details/70652858