您的位置:首页 > 编程语言 > C语言/C++

C++设计模式 -> 创建型 -> 工厂方式(FactoryMethod)

2017-08-05 15:30 816 查看

工厂模式



头文件

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息