11.13
[实验任务一]:人与肤色
使用抽象工厂模式,完成下述产品等级结构:
实验要求:
-
画出对应的类图;
-
提交源代码;
package abstractFactory;
// 抽象工厂
abstract class HumanFactory {
abstract Human createHuman(String gender);
abstract SkinColor createSkinColor();
// 工厂方法来创建完整的人物
public Human createCompleteHuman(String gender) {
Human human = createHuman(gender);
SkinColor skinColor = createSkinColor();
human.setSkinColor(skinColor);
return human;
}
}
package abstractFactory;
// 抽象产品 - 人
abstract class Human {
protected SkinColor skinColor;
public void setSkinColor(SkinColor skinColor) {
this.skinColor = skinColor;
}
public abstract void display();
}
package abstractFactory;
// 具体产品 - 男性
class Male extends Human {
@Override
public void display() {
System.out.println("This is a male with " + skinColor.getColor() + " skin");
}
}
package abstractFactory;
// 具体产品 - 女性
class Female extends Human {
@Override
public void display() {
System.out.println("This is a female with " + skinColor.getColor() + " skin");
}
}
package abstractFactory;
// 抽象产品 - 肤色
abstract class SkinColor {
abstract String getColor();
}
package abstractFactory;
// 具体产品 - 黑色肤色
class BlackSkin extends SkinColor {
@Override
String getColor() {
return "black";
}
}
package abstractFactory;
// 具体产品 - 白色肤色
class WhiteSkin extends SkinColor {
@Override
String getColor() {
return "white";
}
}
package abstractFactory;
// 具体产品 - 黄色肤色
class YellowSkin extends SkinColor {
@Override
String getColor() {
return "yellow";
}
}
package abstractFactory;
// 具体工厂 - 创建黑色肤色的人
class BlackHumanFactory extends HumanFactory {
@Override
Human createHuman(String gender) {
return gender.equalsIgnoreCase("female") ? new Female() : new Male();
}
@Override
SkinColor createSkinColor() {
return new BlackSkin();
}
}
package abstractFactory;
// 具体工厂 - 创建白色肤色的人
class WhiteHumanFactory extends HumanFactory {
@Override
Human createHuman(String gender) {
return gender.equalsIgnoreCase("female") ? new Female() : new Male();
}
@Override
SkinColor createSkinColor() {
return new WhiteSkin();
}
}
package abstractFactory;
// 具体工厂 - 创建黄色肤色的人
class YellowHumanFactory extends HumanFactory {
@Override
Human createHuman(String gender) {
return gender.equalsIgnoreCase("female") ? new Female() : new Male();
}
@Override
SkinColor createSkinColor() {
return new YellowSkin();
}
}
package abstractFactory;
// 客户端测试代码
public class Client {
public static void main(String[] args) {
// 创建白色肤色的女性
HumanFactory whiteFactory = new WhiteHumanFactory();
Human whiteWoman = whiteFactory.createCompleteHuman("female");
whiteWoman.display();
// 创建黄色肤色的男性
HumanFactory yellowFactory = new YellowHumanFactory();
Human yellowMan = yellowFactory.createCompleteHuman("male");
yellowMan.display();
// 创建黑色肤色的女性
HumanFactory blackFactory = new BlackHumanFactory();
Human blackWoman = blackFactory.createCompleteHuman("female");
blackWoman.display();
}
}
3.注意编程规范。