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

工厂模式

这里写图片描述

头文件


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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值