2.抽象工厂(Abstract Factory)

注:图片来源于 https://www.cnblogs.com/-saligia-/p/10216752.html

抽象工厂UML图解析:

 

 

抽象工厂模式:client用户需要三步:

1.创建工厂(一种工厂可以有多种功能);

2.生产产品对象;

3.使用对象方法。

代码:

Factory.h

//
// Created by DELL on 2019/10/15.
//

#ifndef ABSTRACT_FACTORY_FACTORY_H
#define ABSTRACT_FACTORY_FACTORY_H

#include "Product.h"
//工厂类,可以生产两种以上产品:Phone与PC
class Factory {
public:
    virtual Phone* CreatePhone() = 0;
    virtual PC* CreatePC() = 0;
};

//HUAWEI工厂
class HUAWEI : public Factory {
public:
    Phone* CreatePhone() override {
        return new HUAWEIPhone();
    }

    PC* CreatePC() override {
        return new HUAWEIPC();
    }
};

//XIAOMI工厂
class XIAOMI : public Factory {
public:
    Phone* CreatePhone() override {
        return new XIAOMIPhone();
    }

    PC* CreatePC() override {
        return new XIAOMIPC();
    }
};
#endif //ABSTRACT_FACTORY_FACTORY_H

 

Product.h

//
// Created by DELL on 2019/10/15.
//

#ifndef ABSTRACT_FACTORY_PRODUCT_H
#define ABSTRACT_FACTORY_PRODUCT_H

#include <string>

//虚拟手机类
class Phone {
public:
    virtual std::string Say() = 0;
};

//虚拟笔记本电脑类
class PC {
public:
    virtual std::string Say() = 0;
};

//HUAWEI手机
class HUAWEIPhone : public Phone {
public:
    std::string Say() override {
        return "HUAWEI phone, use HM OS";
    }
};

//XIAOMI手机
class XIAOMIPhone : public Phone {
public:
    std::string Say() override {
        return "XIAOMI phone, use MIUI OS";
    }
};

//HUAWEI笔记本
class HUAWEIPC : public PC {
public:
    std::string Say() override {
        return "HUAWEI PC, can use HM OS";
    }
};

//XIAOMI笔记本
class XIAOMIPC : public PC {
    std::string Say() override {
        return "XIAOMI PC, only can use Windows";
    }
};
#endif //ABSTRACT_FACTORY_PRODUCT_H

 

用户 main.cpp

#include <iostream>
#include "Factory.h"

using namespace std;

int main() {
    //创建HUAWEI工厂
    Factory* f1 = new HUAWEI();
    Phone* phone1 = f1->CreatePhone();
    cout << phone1->Say() << endl;

    PC* pc1 = f1->CreatePC();
    cout << pc1->Say() << endl;

    //创建小米工厂
    Factory* f2 = new XIAOMI();
    Phone* phone2 = f2->CreatePhone();
    cout << phone2->Say() << endl;

    PC* pc2 = f2->CreatePC();
    cout << pc2->Say() << endl;

    return 0;
}

 

posted @ 2019-10-15 10:12  Halo_run  阅读(203)  评论(0编辑  收藏  举报