软件设计 石家庄铁道大学信息学院
实验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();
}
}
3.注意编程规范。