10/22

软件设计 石家庄铁道大学信息学院

实验4:抽象工厂模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解抽象工厂模式的动机,掌握该模式的结构;
2、能够利用抽象工厂模式解决实际问题。

[实验任务一]:人与肤色
使用抽象工厂模式,完成下述产品等级结构:

实验要求:
1. 画出对应的类图;

2.提交源代码;
public interface SkinColor {
void showSkinColor();
}

public class YellowSkin implements SkinColor {
@Override
public void showSkinColor() {
System.out.println("Skin color is yellow");
}
}

public class WhiteSkin implements SkinColor {
@Override
public void showSkinColor() {
System.out.println("Skin color is white");
}
}

public class DarkSkin implements SkinColor {
@Override
public void showSkinColor() {
System.out.println("Skin color is dark");
}
}

public interface Gender {
void showGender();
}

public class Male implements Gender {
@Override
public void showGender() {
System.out.println("Gender is male");
}
}

public class Female implements Gender {
@Override
public void showGender() {
System.out.println("Gender is female");
}
}

public abstract class PersonFactory {
public abstract SkinColor getSkinColor(String color);
public abstract Gender getGender(String gender);
}

public class SkinColorFactory extends PersonFactory {
@Override
public SkinColor getSkinColor(String color) {
switch (color.toLowerCase()) {
case "yellow":
return new YellowSkin();
case "white":
return new WhiteSkin();
case "dark":
return new DarkSkin();
default:
throw new IllegalArgumentException("Unknown skin color: " + color);
}
}

@Override
public Gender getGender(String gender) {
return null; // Not applicable
}
}

public class GenderFactory extends PersonFactory {
@Override
public SkinColor getSkinColor(String color) {
return null; // Not applicable
}

@Override
public Gender getGender(String gender) {
switch (gender.toLowerCase()) {
case "male":
return new Male();
case "female":
return new Female();
default:
throw new IllegalArgumentException("Unknown gender: " + gender);
}
}
}

public class FactoryProducer {
public static PersonFactory getFactory(String type) {
switch (type.toLowerCase()) {
case "skincolor":
return new SkinColorFactory();
case "gender":
return new GenderFactory();
default:
throw new IllegalArgumentException("Unknown factory type: " + type);
}
}
}

public class Main {
public static void main(String[] args) {
PersonFactory skinFactory = FactoryProducer.getFactory("skincolor");
PersonFactory genderFactory = FactoryProducer.getFactory("gender");

SkinColor skin = skinFactory.getSkinColor("yellow");
Gender gender = genderFactory.getGender("male");

skin.showSkinColor();
gender.showGender();
}
}
3.注意编程规范。

posted @ 2024-10-22 17:31  Hbro  阅读(8)  评论(0)    收藏  举报