抽象工厂模式

#include<iostream>
#include<string>
using namespace std;

//抽象产品类 男人
class Man
{
public:
    virtual void makeM() = 0;
};
//具体产品类 白色男人
class WhiteMan : public Man
{
public:
    void makeM()
    {
        cout << "我是白种男人" << endl;
    }
};
//具体产品类 黄色男人
class YellowMan : public Man
{
public:
    void makeM()
    {
        cout << "我是黄种男人" << endl;
    }
};
//具体产品类  黑色男人
class BlackMan : public Man
{
public:
    void makeM()
    {
        cout << "我是黑种男人" << endl;
    }
};

//抽象产品类 女人
class Woman
{
public:
    virtual void makeW() = 0;
};
//具体产品类 白色女人
class WhiteWoman : public Woman
{
public:
    void makeW()
    {
        cout << "我是白种女人" << endl;
    }
};
//具体产品类 黄色女人
class YellowWoman : public Woman
{
public:
    void makeW()
    {
        cout << "我是黄种女人" << endl;
    }
};
//具体产品类 黑色女人
class BlackWoman : public Woman
{
public:
    void makeW()
    {
        cout << "我是黑种女人" << endl;
    }
};
//抽象工厂类  肤色
class Color
{
public:
    virtual Man *produceMan() = 0;
    virtual Woman *produceWoman() = 0;
};
//具体工厂类 黄色
class Yellow : public Color
{
public:
    Man *produceMan()
    {
        return new YellowMan();
    }
    Woman *produceWoman()
    {
        return new YellowWoman();
    }
};
//具体工厂类 白色
class White : public Color
{
public:
    Man* produceMan()
    {
        return new  WhiteMan();
    }
    Woman *produceWoman()
    {
        return new  WhiteWoman();
    }
};
//具体工厂类 黑色
class Black : public Color
{
public:
    Man * produceMan()
    {
        return  new BlackMan();
    }
    Woman * produceWoman()
    {
        return new BlackWoman();
    }
};
//主函数
int main(int argc, char*argv[])
{
    Color * color_y = new Yellow();
    Man * man_y = color_y->produceMan();
    Woman * woman_y = color_y->produceWoman();

    Color * color_b = new Black();
    Man * man_b = color_b->produceMan();
    Woman * woman_b = color_b->produceWoman();

    Color * color_w = new White();
    Man * man_w = color_w->produceMan();
    Woman * woman_w = color_w->produceWoman();

    string t;
    string y = "Yellow";
    string b = "Black";
    string w = "White";
    string e = "exit";
    while (strcmp(t.c_str(), e.c_str()) != 0)
    {
        cout << "请输入标识符";
        cin >> t;
        if (strcmp(t.c_str(), y.c_str()) == 0)
        {
            man_y->makeM();
            woman_y->makeW();
        }
        else if (strcmp(t.c_str(), w.c_str()) == 0) {
            man_w->makeM();
            woman_w->makeW();
        }
        else if (strcmp(t.c_str(), b.c_str()) == 0) {
            man_b->makeM();
            woman_b->makeW();
        }
        else if (strcmp(t.c_str(), e.c_str()) == 0) {   //输入exit退出系统
            cout << "退出" << endl;
        }
        else {
            cout << "输入的有误,请重新输入!" << endl;
        }
        cout << endl;
    }


    if (man_y != NULL)
    {
        delete man_y;
        man_y = NULL;
    }

    if (woman_y != NULL)
    {
        delete woman_y;
        woman_y = NULL;
    }

    if (man_b != NULL)
    {
        delete man_b;
        man_b = NULL;
    }

    if (woman_b != NULL)
    {
        delete woman_b;
        woman_b = NULL;
    }

    if (man_w != NULL)
    {
        delete man_w;
        man_w = NULL;
    }

    if (woman_w != NULL)
    {
        delete woman_w;
        woman_w = NULL;
    }
}

 

posted @ 2021-10-06 21:06  yasai  阅读(21)  评论(0编辑  收藏  举报