工厂模式
头文件
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_H
base_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_H
inheritance_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_H
inheritance_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_H
源文件
main.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