c++抽象工厂模式

2021-03-02  本文已影响0人  一路向后

1.抽象工厂模式简介

   抽象工厂是工厂方法的升级版,为相关或者相互依赖的对象提供一个接口,而且无效指定他们的具体实现类。

2.源码实现

#include <iostream>

using namespace std;

//抽象工厂模式

enum CarType {
    BENZ,
    BMW
};

//车类
class Car
{
public:
    virtual void createdCar(void) = 0;
    virtual ~Car(){};
};

//高配版车类
class HighCar
{
public:
    virtual void createdCar(void) = 0;
    virtual ~HighCar(){};
};

//奔驰车
class BenzCar : public Car
{
public:
    BenzCar()
    {
        cout << "BenzCar::BenzCar()" << endl;
    }

    virtual void createdCar(void)
    {
        cout << "BenzCar::createdCar()" << endl;
    }

    ~BenzCar()
    {
        cout << "BenzCar::~BenzCar()" << endl;
    }
};

//宝马车
class BmwCar : public Car
{
public:
    BmwCar()
    {
        cout << "BmwCar::BmwCar()" << endl;
    }

    virtual void createdCar(void)
    {
        cout << "BmwCar::createdCar()" << endl;
    }

    ~BmwCar()
    {
        cout << "BmwCar::~BmwCar()" << endl;
    }
};

//奔驰高配车
class HighBenzCar : public HighCar
{
public:
    HighBenzCar()
    {
        cout << "HighBenzCar::HighBenzCar()" << endl;
    }

    virtual void createdCar(void)
    {
        cout << "HighBenzCar::createdCar()" << endl;
    }

    ~HighBenzCar()
    {
        cout << "HighBenzCar::~HighBenzCar()" << endl;
    }
};

//宝马高配车
class HighBmwCar : public HighCar
{
public:
    HighBmwCar()
    {
        cout << "HighBmwCar::HighBmwCar()" << endl;
    }

    virtual void createdCar(void)
    {
        cout << "HighBmwCar::createdCar()" << endl;
    }

    ~HighBmwCar()
    {
        cout << "HighBmwCar::~HighBmwCar()" << endl;
    }
};

//车工厂
class CarFactory
{
public:
    virtual Car *createSpecificCar(void) = 0;
    virtual HighCar *createSpecificHighCar(void) = 0;
    virtual ~CarFactory(){};
};

//奔驰车工厂
class BenzFactory : public CarFactory
{
public:
    BenzFactory(){}

    virtual Car *createSpecificCar(void)
    {
        return (new BenzCar());
    }

    virtual HighCar *createSpecificHighCar(void)
    {
        return (new HighBenzCar());
    }

    ~BenzFactory()
    {
        cout << "BenzFactory::~BenzFactory()" << endl;
    }
};

//宝马车工厂
class BmwFactory : public CarFactory
{
public:
    BmwFactory() {}

    virtual Car *createSpecificCar(void)
    {
        return (new BmwCar());
    }

    virtual HighCar *createSpecificHighCar(void)
    {
        return (new HighBmwCar());
    }

    ~BmwFactory()
    {
        cout << "BmwFactory::~BmwFactory()" << endl;
    }
};

int main()
{
    CarFactory *benzfac = new BenzFactory();
    CarFactory *bmwfac = new BmwFactory();

    Car *CardA = benzfac->createSpecificCar();
    Car *CardB = bmwfac->createSpecificCar();
    HighCar *CardC = benzfac->createSpecificHighCar();
    HighCar *CardD = bmwfac->createSpecificHighCar();

    delete CardA;
    delete CardB;
    delete CardC;
    delete CardD;

    delete benzfac;
    delete bmwfac;

    return 0;
}

3.编译源码

$ g++ -o example example.cpp

4.运行及其结果

$ ./example
BenzCar::BenzCar()
BmwCar::BmwCar()
HighBenzCar::HighBenzCar()
HighBmwCar::HighBmwCar()
BenzCar::~BenzCar()
BmwCar::~BmwCar()
HighBenzCar::~HighBenzCar()
HighBmwCar::~HighBmwCar()
BenzFactory::~BenzFactory()
BmwFactory::~BmwFactory()
上一篇下一篇

猜你喜欢

热点阅读