美文网首页
c++抽象工厂模式

c++抽象工厂模式

作者: 一路向后 | 来源:发表于2021-03-02 21:24 被阅读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()
    

    相关文章

      网友评论

          本文标题:c++抽象工厂模式

          本文链接:https://www.haomeiwen.com/subject/looxqltx.html