每日总结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;

}

 

 

posted @   迷路的羔羊-  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示