实验4:抽象工厂模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解抽象工厂模式的动机,掌握该模式的结构;
2、能够利用抽象工厂模式解决实际问题。
[实验任务一]:人与肤色
使用抽象工厂模式,完成下述产品等级结构:
实验要求:
1.画出对应的类图;
![](https://img2023.cnblogs.com/blog/2444024/202212/2444024-20221216105306880-898593314.png)
2.提交源代码;
Java:
1.BlackFactory
public class BlackFactory implements HumanFactory{
@Override
public Woman createWoman() {
return new BLackWoman();
}
@Override
public Man createMan() {
return new BlackMan();
}
}
2.BlackMan
public class BlackMan implements Man{
@Override
public void manEat() {
System.out.println("black
man eat");
}
}
3.BlackWoman
public class BLackWoman implements Woman{
@Override
public void womanEat() {
System.out.println("black
woman eat");
}
}
4.WhiteFactory
public class WhiteFactory implements HumanFactory{
@Override
public Woman createWoman() {
return new WhiteWoman();
}
@Override
public Man createMan() {
return new WhiteMan();
}
}
5.WhiteMan
public class WhiteMan implements Man{
@Override
public void manEat() {
System.out.println("white
man eat");
}
}
6.WhiteWoman
public class WhiteWoman implements Woman{
@Override
public void womanEat() {
System.out.println("white
woman eat");
}
}
7.YellowFactory
public class YellowFactory implements HumanFactory{
@Override
public Woman createWoman() {
return new YellowWoman();
}
@Override
public Man createMan() {
return new YellowMan();
}
}
8.YellowMan
public class YellowMan implements Man{
@Override
public void manEat() {
System.out.println("yellow
man eat");
}
}
9.YellowWoman
public class YellowWoman implements Woman{
@Override
public void womanEat() {
System.out.println("yellow
woman eat");
}
}
10.HumanFactory
public interface HumanFactory {
Woman createWoman();
Man createMan();
}
11.Man
public interface Man {
void manEat();
}
12.Woman
public interface Woman {
void womanEat();
}
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;
}
3.注意编程规范。