实验4:抽象工厂模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解抽象工厂模式的动机,掌握该模式的结构;
2、能够利用抽象工厂模式解决实际问题。
[实验任务一]:人与肤色
使用抽象工厂模式,完成下述产品等级结构:
实验要求:
1. 画出对应的类图;

2.提交源代码;
// 抽象工厂接口
interface HumanFactory {
MaleHuman createMaleHuman();
FemaleHuman createFemaleHuman();
}
// 抽象男性人类类
abstract class MaleHuman {
public abstract String getColor();
public abstract void talk();
}
// 抽象女性人类类
abstract class FemaleHuman {
public abstract String getColor();
public abstract void talk();
}
// 黄色人种男性类
class YellowMaleHuman extends MaleHuman {
@Override
public String getColor() {
return "黄色";
}
@Override
public void talk() {
System.out.println("黄色人种男性说话。");
}
}
// 白色人种男性类
class WhiteMaleHuman extends MaleHuman {
@Override
public String getColor() {
return "白色";
}
@Override
public void talk() {
System.out.println("白色人种男性说话。");
}
}
// 黑色人种男性类
class BlackMaleHuman extends MaleHuman {
@Override
public String getColor() {
return "黑色";
}
@Override
public void talk() {
System.out.println("黑色人种男性说话。");
}
}
// 黄色人种女性类
class YellowFemaleHuman extends FemaleHuman {
@Override
public String getColor() {
return "黄色";
}
@Override
public void talk() {
System.out.println("黄色人种女性说话。");
}
}
// 白色人种女性类
class WhiteFemaleHuman extends FemaleHuman {
@Override
public String getColor() {
return "白色";
}
@Override
public void talk() {
System.out.println("白色人种女性说话。");
}
}
// 黑色人种女性类
class BlackFemaleHuman extends FemaleHuman {
@Override
public String getColor() {
return "黑色";
}
@Override
public void talk() {
System.out.println("黑色人种女性说话。");
}
}
// 黄色人种工厂类
class YellowHumanFactory implements HumanFactory {
@Override
public MaleHuman createMaleHuman() {
return new YellowMaleHuman();
}
@Override
public FemaleHuman createFemaleHuman() {
return new YellowFemaleHuman();
}
}
// 白色人种工厂类
class WhiteHumanFactory implements HumanFactory {
@Override
public MaleHuman createMaleHuman() {
return new WhiteMaleHuman();
}
@Override
public FemaleHuman createFemaleHuman() {
return new WhiteFemaleHuman();
}
}
// 黑色人种工厂类
class BlackHumanFactory implements HumanFactory {
@Override
public MaleHuman createMaleHuman() {
return new BlackMaleHuman();
}
@Override
public FemaleHuman createFemaleHuman() {
return new BlackFemaleHuman();
}
}
public class Main {
public static void main(String[] args) {
// 创建黄色人种工厂
HumanFactory yellowFactory = new YellowHumanFactory();
// 创建黄色人种男性和女性
MaleHuman yellowMale = yellowFactory.createMaleHuman();
FemaleHuman yellowFemale = yellowFactory.createFemaleHuman();
System.out.println("黄色人种男性肤色:" + yellowMale.getColor());
yellowMale.talk();
System.out.println("黄色人种女性肤色:" + yellowFemale.getColor());
yellowFemale.talk();
// 创建白色人种工厂
HumanFactory whiteFactory = new WhiteHumanFactory();
// 创建白色人种男性和女性
MaleHuman whiteMale = whiteFactory.createMaleHuman();
FemaleHuman whiteFemale = whiteFactory.createFemaleHuman();
System.out.println("白色人种男性肤色:" + whiteMale.getColor());
whiteMale.talk();
System.out.println("白色人种女性肤色:" + whiteFemale.getColor());
whiteFemale.talk();
// 创建黑色人种工厂
HumanFactory blackFactory = new BlackHumanFactory();
// 创建黑色人种男性和女性
MaleHuman blackMale = blackFactory.createMaleHuman();
FemaleHuman blackFemale = blackFactory.createFemaleHuman();
System.out.println("黑色人种男性肤色:" + blackMale.getColor());
blackMale.talk();
System.out.println("黑色人种女性肤色:" + blackFemale.getColor());
blackFemale.talk();
}
}
浙公网安备 33010602011771号