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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统