11.6

软件设计                  石家庄铁道大学信息学院

 

实验4:抽象工厂模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解抽象工厂模式的动机,掌握该模式的结构;

2、能够利用抽象工厂模式解决实际问题

 

[实验任务一]:人与肤色

使用抽象工厂模式,完成下述产品等级结构:

 

实验要求:

1.画出对应的类图;

2.提交源代码;

3.注意编程规范。

 

#include<iostream>

using namespace std;

//抽象产品类——Man类

class Man{

public:

       virtual void show() = 0;

};

//抽象产品类——Woman类

class Woman{

public:

       virtual void show() = 0;

};

//具体产品类——YellowMan类

class YellowMan : public Man{

public:

       virtual void show(){

             cout << "黄皮肤的男性" << endl;

       }

};

//具体产品类——BlackMan类

class BlackMan : public Man{

public:

       virtual void show(){

 

              cout << "黑皮肤的男性" << endl;

       }

};

//具体产品类——WhiteMan类

class WhiteMan : public Man{

public:

       virtual void show(){

              cout << "白皮肤的男性" << endl;

       }

};

//具体产品类——YellowWoman类

class YellowWoman : public Woman{

public:

       virtual void show(){

              cout << "黄皮肤的女性" << endl;

       }

};

//具体产品类——BlackWoman类

class BlackWoman : public Woman{

public:

       virtual void show(){

              cout << "黑皮肤的女性" << endl;

       }

};

//具体产品类——WhiteWoman类

class WhiteWoman : public Woman{

public:

       virtual void show(){

              cout << "白皮肤的女性" << endl;

       }

};

//抽象工厂类——AbstractFactory类

class AbstractFactory{

public:

       virtual Man* produceMan() = 0;

       virtual Woman* produceWoman() = 0;

};

//具体工厂类——YellowFactory类

class YellowFactory : public AbstractFactory{

public:

       virtual Man* produceMan(){

              return new YellowMan();

       }

       virtual Woman* produceWoman(){

                     return new YellowWoman();

       }

};

//具体工厂类——BlackFactory类

class BlackFactory : public AbstractFactory{

public:

       virtual Man* produceMan(){

              return new BlackMan();

       }

       virtual Woman* produceWoman(){

                     return new BlackWoman();

       }

};

//具体工厂类——WhiteFactory类

class WhiteFactory : public AbstractFactory{

public:

       virtual Man* produceMan(){

              return new WhiteMan();

       }

       virtual Woman* produceWoman(){

                     return new WhiteWoman();

       }

};

//测试类——test类

void test(){

       //黄皮肤工厂

       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;

       cout<<"*************************"<<endl;

 

       //黑皮肤工厂

       factory = new BlackFactory;

       man = factory->produceMan();

       man->show();

       delete man;

       man = NULL;

 

       woman = factory->produceWoman();

       woman->show();

       delete woman;

       woman = NULL;

       delete factory;

       factory = NULL;

       cout<<"*************************"<<endl;

 

       //白皮肤工厂

       factory = new WhiteFactory;

       man = factory->produceMan();

       man->show();

       delete man;

       man = NULL;

 

       woman = factory->produceWoman();

       woman->show();

       delete woman;

       woman = NULL;

       delete factory;

       factory = NULL;

}

int main(){

       test();

       return 0;

}

 

posted @   秋渡晚枫  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示