首页 > 编程语言 >抽象工厂模式--C++实现

抽象工厂模式--C++实现

时间:2023-10-14 10:11:35浏览次数:52  
标签:delete woman show -- factory C++ 抽象 NULL man

具体代码实现

#include<iostream>
using namespace std;

class Man {
public:
    virtual void show() = 0;
};

class Woman {
public:
    virtual void show() = 0;
};

class YellowMan : public Man {
public:
    virtual void show() {
        cout << "黄皮肤的男性" << endl;
    }
};

class BlackMan : public Man {
public:
    virtual void show() {
        cout << "黑皮肤的男性" << endl;
    }
};

class WhiteMan : public Man {
public:
    virtual void show() {
        cout << "白皮肤的男性" << endl;
    }
};

class YellowWoman : public Woman {
public:
    virtual void show() {
        cout << "黄皮肤的女性" << endl;
    }
};

class BlackWoman : public Woman {
public:
    virtual void show() {
        cout << "黑皮肤的女性" << endl;
    }
};

class WhiteWoman : public Woman {
public:
    virtual void show() {
        cout << "白皮肤的女性" << endl;
    }
};

class AbstractFactory {
public:
    virtual Man* produceMan() = 0;
    virtual Woman* produceWoman() = 0;
};

class YellowFactory : public AbstractFactory {
public:
    virtual Man* produceMan() {
        return new YellowMan();
    }
    virtual Woman* produceWoman() {
        return new YellowWoman();
    }
};

class BlackFactory : public AbstractFactory {
public:
    virtual Man* produceMan() {
        return new BlackMan();
    }
    virtual Woman* produceWoman() {
        return new BlackWoman();
    }
};

class WhiteFactory : public AbstractFactory {
public:
    virtual Man* produceMan() {
        return new WhiteMan();
    }
    virtual Woman* produceWoman() {
        return new WhiteWoman();
    }
};

int main() {

    cout << "请选择:1、白皮肤;2、黑皮肤;3、黄皮肤" << endl;
    int i;
    cin >> i;
    if (i == 1) {
        AbstractFactory* factory = NULL;
        factory = new YellowFactory;
        Man* man = factory->produceMan();
        man->show();
        delete man;
        man = NULL;

        Woman* woman = factory->produceWoman();
        woman->show();
        delete woman;
        woman = NULL;
        delete factory;
        factory = NULL;
    }
    else if (i == 2) {
        AbstractFactory* factory = NULL;
        factory = new BlackFactory;
        Man *man = factory->produceMan();
        man->show();
        delete man;
        man = NULL;

        Woman *woman = factory->produceWoman();
        woman->show();
        delete woman;
        woman = NULL;
        delete factory;
        factory = NULL;
    }
    else if (i == 3) {
        AbstractFactory* factory = NULL;
        factory = new WhiteFactory;
        Man *man = factory->produceMan();
        man->show();
        delete man;
        man = NULL;

        Woman *woman = factory->produceWoman();
        woman->show();
        delete woman;
        woman = NULL;
        delete factory;
        factory = NULL;
    }
    else {
        cout << "请输入正确的格式~" << endl;
    }
   
    return 0;
}

标签:delete,woman,show,--,factory,C++,抽象,NULL,man
From: https://www.cnblogs.com/liuzijin/p/17763715.html

相关文章

  • ping 工具使用
    ping工具使用Ping(PacketInternetGroper)是其中最常用和最基本的之一。它是一个用于测试网络连接的命令行工具,可以帮助确定计算机是否能够与另一个计算机或网络设备进行通信。1Ping命令的基本用法Ping命令是一个网络工具,用于测试两台计算机之间的网络连接。它通过向目标计算......
  • 向量化操作简介和Pandas、Numpy示例
    Pandas是一种流行的用于数据操作的Python库,它提供了一种称为“向量化”的强大技术可以有效地将操作应用于整个列或数据系列,从而消除了显式循环的需要。在本文中,我们将探讨什么是向量化,以及它如何简化数据分析任务。 https://avoid.overfit.cn/post/ae2f68c9b2a548b59629755a05......
  • 升级Lync Server 2013到Skype for Business 2019(十)
    写在前面在前面几章,我们完成了SkypeforBusiness2019前端服务器,边缘服务器以及新的OOS服务器的创建与配置。从本章开始,我们将介绍如何逐步将LyncServer2013的相关服务切换到SkypeforBusiness2019环境。本章将介绍如何切换OOS服务器。由于新的OOS服务器与旧有的OWA服务器使用......
  • 无涯教程-Matplotlib - Subplot2grid函数
    Subplot2grid函数为在特定位置创建轴对象提供了更大的灵活性,它还允许axis对象跨越多个行或列。Plt.subplot2grid(shape,location,rowspan,colspan)在以下示例中,图形对象的3X3网格填充行和列跨度大小不同的轴对象,每个对象都显示不同的图。importmatplotlib.pyplotasplt......
  • 手把手带你用Python和文心一言搭建《AI看图写诗》网页项目
    今年年初,ChatGPT的火爆在全球掀起AI大模型的开发热潮,国内外的科技公司纷纷加入“百模大战”行列。百度在率先发布了国内第一款人工智能大语言模型“文心一言”后,又推出了文心千帆大模型平台,帮助企业和开发者加速大模型应用落地。而最近百度创始人、董事长兼首席执行官李彦宏在一场......
  • 之前用emqx海外版 被墙了esp连不上去 只能换成emqx国内版
    如果你之前使用EMQX海外版时连接被墙,导致ESP无法正常连接,那么换成EMQX国内版可能是更好的选择。EMQX国内版是EMQ针对中国市场推出的版本,它支持全托管的云原生MQTT消息服务,并且具有一站式运维代管功能,可以连接海量物联网设备,免除基础设施管理维护负担,加速用户的业务交付与创新。......
  • 没备案,用的是IP地址,不是域名 只是借用公网IP穿透一下,服务器是自己的电脑 这样无论在哪
    如果你的服务器是自己的电脑,并且你正在使用公网IP进行访问,那么你需要确保你的电脑一直保持开机状态,并且公网IP地址是可用的,才能从任何地方访问你的电脑。此外,使用公网IP地址进行访问可能会涉及到一些安全问题,因此建议你采取以下措施来提高安全性:开启防火墙:在你的电脑上安装并启用防......
  • 生成独热编码 list
    list_new=[]foriinrange(5):list_test=[0]*5list_test[i]=1list_new.append(list_test)print(list_new)[[0ifj!=ielse1forjinrange(5)]foriinrange(5)]list_new=[]foriinrange(4):list_test=[0]*4list_test[i]......
  • 14.4 Socket 双向数据通信
    所谓双向数据传输指的是客户端与服务端之间可以无差异的实现数据交互,此类功能实现的核心原理是通过创建CreateThread()函数多线程分别接收和发送数据包,这样一旦套接字被建立则两者都可以异步发送消息,本章将实现简单的双向交互功能。首先我们需要封装两个函数,这里RecvFunction函数......
  • Linux怎么修改权限
    rwx:r代表可读,w代表可写,x代表该文件是一个可执行文件,如果rwx任意位置变为-则代表不可读或不可写或不可执行文件。示例:给aaa.txt文件权限改为可执行文件权限,aaa.txt文件的权限时-rw----第一位:-就代表是文件,d代表是文件夹第一段(3位):代表拥有者的权限第二段(3位):代表拥有者所在的组,组员的......