抽象工厂模式
软件设计 石家庄铁道大学信息学院
实验4:抽象工厂模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解抽象工厂模式的动机,掌握该模式的结构;
2、能够利用抽象工厂模式解决实际问题。
[实验任务一]:人与肤色
使用抽象工厂模式,完成下述产品等级结构:
实验要求:
1. 画出对应的类图;
2. 提交源代码;
import java.util.Scanner;
public class Person {
public static void main(String [] args) {
SexFactory sex=null;
ColorFactory color=null;
int s,c;
Scanner sc=new Scanner(System.in);
System.out.println("请输入你要生产的小人的性别 1是女孩 2是男孩");
s=sc.nextInt();
System.out.println("请输入你要生产的小人的颜色 1是黄种 2是黑种 3是白种");
c=sc.nextInt();
System.out.print("您生产了一个");
switch(c) {
case 1:
color=new yellowFactory();
color.produce();
break;
case 2:
color=new blackFactory();
color.produce();
break;
case 3:
color=new whiteFactory();
color.produce();
break;
default:
System.out.println("透明");
}
switch(s) {
case 1:
sex=new girlFactory();
sex.produce();
break;
case 2:
sex=new boyFactory();
sex.produce();
break;
default:
System.out.print("无性别孩子");
}
}
}
#include <iostream>
using namespace std;
class SexFactory{
public:
virtual void produce(){
cout<<"无性别孩子"<<endl;
}
};
class girlFactory:public SexFactory{
public:
void produce(){
// TODO Auto-generated method stub
cout<<"女孩"<<endl;
}
};
class boyFactory:public SexFactory{
public:
void produce(){
// TODO Auto-generated method stub
cout<<"男孩"<<endl;
}
};
class ColorFactory{
public:
virtual void produce(){
cout<<"透明";
};
};
class yellowFactory:public ColorFactory{
public:
void produce(){
// TODO Auto-generated method stub
cout<<"黄种";
}
};
class whiteFactory:public ColorFactory{
public:
void produce(){
// TODO Auto-generated method stub
cout<<"白种";
}
};
class blackFactory:public ColorFactory{
public:
void produce(){
// TODO Auto-generated method stub
cout<<"黑种";
}
};
class Person{
public:
Person(){
SexFactory* sex;
ColorFactory* color;
int s,c;
cout<<"请输入你要生产的小人的性别 1是女孩 2是男孩"<<endl;
cin>>s;
cout<<"请输入你要生产的小人的颜色 1是黄种 2是黑种 3是白种"<<endl;
cin>>c;
cout<<"您生产了一个";
yellowFactory y;
blackFactory b;
whiteFactory w;
switch(c) {
case 1:
color=&y;
break;
case 2:
color=&b;
break;
case 3:
color=&w;
break;
default:;
}
color->produce();
girlFactory g;
boyFactory bo;
switch(s) {
case 1:
sex=&g;
break;
case 2:
sex=&bo;
break;
default:;
}
sex->produce();
}
};
int main()
{
Person person;
return 0;
}