每日总结01
软件设计
实验4:抽象工厂模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解抽象工厂模式的动机,掌握该模式的结构;
2、能够利用抽象工厂模式解决实际问题。
[实验任务一]:人与肤色
使用抽象工厂模式,完成下述产品等级结构:
实验要求:
1.画出对应的类图;
2.提交源代码;
Java:
1.BlackFactory.java
public class BlackFactory implements HumanFactory{
@Override
public Woman createWoman() {
return new BLackWoman();
}
@Override
public Man createMan() {
return new BlackMan();
}
}
2.BlackMan.java
public class BlackMan implements Man{
@Override
public void manEat() {
System.out.println("black man eat");
}
}
3.BlackWoman.java
public class BLackWoman implements Woman{
@Override
public void womanEat() {
System.out.println("black woman eat");
}
}
4.WhiteFactory.java
public class WhiteFactory implements HumanFactory{
@Override
public Woman createWoman() {
return new WhiteWoman();
}
@Override
public Man createMan() {
return new WhiteMan();
}
}
5.WhiteMan.java
public class WhiteMan implements Man{
@Override
public void manEat() {
System.out.println("white man eat");
}
}
6.WhiteWoman.java
public class WhiteWoman implements Woman{
@Override
public void womanEat() {
System.out.println("white woman eat");
}
}
7.YellowFactory.java
public class YellowFactory implements HumanFactory{
@Override
public Woman createWoman() {
return new YellowWoman();
}
@Override
public Man createMan() {
return new YellowMan();
}
}
8.YellowMan.java
public class YellowMan implements Man{
@Override
public void manEat() {
System.out.println("yellow man eat");
}
}
9.YellowWoman.java
public class YellowWoman implements Woman{
@Override
public void womanEat() {
System.out.println("yellow woman eat");
}
}
10.HumanFactory.java
public interface HumanFactory {
Woman createWoman();
Man createMan();
}
11.Man.java
public interface Man {
void manEat();
}
12.Woman
public interface Woman {
void womanEat();
}
(1) C++
#include "stdafx.h"
using namespace std;
class Man;
class Woman;
class AbstractFactory{
public:
virtual Man* createMan() = 0;
virtual Woman* createWoman() = 0;
};
class Man
{
public:
virtual void maneat() = 0;
};
class Woman
{
public:
virtual void womaneat() = 0;
};
class YellowMan :public Man
{
public:
void maneat() {
cout << "Yellow man" << endl;
}
};
class YellowWoman :public Woman
{
public:
void womaneat() {
cout << "Yellow woman" << endl;
}
};
class BlackMan :public Man
{
public:
void maneat() {
cout << "Black man" << endl;
}
};
class BlackWoman :public Woman
{
public:
void womaneat() {
cout << "Black woman" << endl;
}
};
class WhiteMan :public Man
{
public:
void maneat() {
cout << "white man" << endl;
}
};
class WhiteWoman :public Woman
{
public:
void womaneat() {
cout << "white woman" << endl;
}
};
class YellowHumanFactory :public AbstractFactory
{
public:
YellowMan* createMan(){
return new YellowMan();
}
YellowWoman* createWoman(){
return new YellowWoman();
}
};
class BlackHumanFactory :public AbstractFactory
{
public:
BlackMan* createMan(){
return new BlackMan();
}
BlackWoman* createWoman(){
return new BlackWoman();
}
};
class WhiteHumanFactory :public AbstractFactory
{
public:
WhiteMan* createMan(){
return new WhiteMan();
}
WhiteWoman* createWoman(){
return new WhiteWoman();
}
};
class Client
{
public:
AbstractFactory* abstractFactory;
Man* man;
Woman* woman;
void excute(){
for (int i = 0; i < 3; i++)
{
if (i==0)
abstractFactory = new YellowHumanFactory();
else if (i==1)
abstractFactory = new WhiteHumanFactory();
else
abstractFactory = new BlackHumanFactory();
man = abstractFactory->createMan();
woman = abstractFactory->createWoman();
man->maneat();
woman->womaneat();
}
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Client* client = new Client();
client->excute();
system("pause");
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!