• 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;
    }
  • 相关阅读:
    c++字符串
    Ubuntu系统的安装与使用 深度音乐播放器
    Ubuntu14.04安装wineqq国际版
    pythonchallenge 解谜 Level 0
    Ubuntu 14.04 安装pdf阅读器
    Ubuntu换源
    pythonchallenge 解谜
    java实现图像灰度化
    c语言完成宽带拨号
    应用程序权限设计
  • 原文地址:https://www.cnblogs.com/chenleideblog/p/11675932.html
Copyright © 2020-2023  润新知