抽象工厂模式(二)

#include <iostream>
using namespace std;

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

class WhiteMan : public Man {
public:
    virtual void introduce() {
        cout << "我是白种男人!" << endl;
    }
};

class YellowMan : public Man {
public:
    virtual void introduce() {
        cout << "我是黄种男人!" << endl;
    }
};

class BlackMan : public Man {
public:
    virtual void introduce() {
        cout << "我是黑种男人!" << endl;
    }
};

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

class WhiteWoman : public Woman {
public:
    virtual void introduce() {
        cout << "我是白种女人!" << endl;
    }
};

class YellowWoman : public Woman {
public:
    virtual void introduce() {
        cout << "我是黄种女人!" << endl;
    }
};

class BlackWoman : public Woman {
public:
    virtual void introduce() {
        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 WhiteFactory : public AbstractFactory {
public:
    virtual Man* ProduceMan() {
        return new WhiteMan;
    }

    virtual Woman* ProduceWoman() {
        return new WhiteWoman;
    }
};

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

int main(void) {
    AbstractFactory * factory = NULL;
    Man *man = NULL;
    Woman *woman = NULL;

    // 黄人
    factory = new YellowFactory;
    man = factory->ProduceMan();
    woman = factory->ProduceWoman();
    man->introduce();
    woman->introduce();

    delete woman;
    delete man;
    delete factory;

    cout << "-----------------------" << endl;
    // 白人
    factory = new WhiteFactory;
    man = factory->ProduceMan();
    woman = factory->ProduceWoman();
    man->introduce();
    woman->introduce();
    delete woman;
    delete man;
    delete factory;

    cout << "-----------------------" << endl;
    // 黑人
    factory = new BlackFactory;
    man = factory->ProduceMan();
    woman = factory->ProduceWoman();
    man->introduce();
    woman->introduce();
    delete woman;
    delete man;
    delete factory;
}

 

posted @ 2022-10-08 15:56  今天又双叒叕在敲代码  阅读(16)  评论(0编辑  收藏  举报