软件设计实验四

源码:

 

// 抽象产品类:肤色 

abstract class SkinColor { 

    public abstract String getColor(); 

 

class WhiteSkinColor extends SkinColor { 

    @Override 

    public String getColor() { 

        return "White"; 

    } 

 

class DarkSkinColor extends SkinColor { // 简化处理,将黄皮肤和黑皮肤归为一类 

    @Override 

    public String getColor() { 

        return "Dark"; // 可以是"Yellow"或"Black",这里统一为"Dark" 

    } 

 

// 抽象产品类:性别 

abstract class Gender { 

    public abstract String getGender(); 

 

class Male extends Gender { 

    @Override 

    public String getGender() { 

        return "Male"; 

    } 

 

class Female extends Gender { 

    @Override 

    public String getGender() { 

        return "Female"; 

    } 

 

// 抽象工厂类 

abstract class PersonFactory { 

    public abstract SkinColor createSkinColor(); 

    public abstract Gender createGender(); 

 

// 具体工厂类:白皮肤工厂 

class LightSkinFactory extends PersonFactory { 

    @Override 

    public SkinColor createSkinColor() { 

        return new WhiteSkinColor(); 

    } 

 

    @Override 

    public Gender createGender(String genderType) { 

        if (genderType.equals("Male")) { 

            return new Male(); 

        } else if (genderType.equals("Female")) { 

            return new Female(); 

        } 

        return null; // 或者抛出异常 

    } 

 

// 具体工厂类:暗皮肤工厂(包括黄皮肤和黑皮肤) 

class DarkSkinFactory extends PersonFactory { 

    @Override 

    public SkinColor createSkinColor() { 

        return new DarkSkinColor(); // 根据需要可以返回YellowSkinColor或BlackSkinColor 

    } 

 

    @Override 

    public Gender createGender(String genderType) { 

        if (genderType.equals("Male")) { 

            return new Male(); 

        } else if (genderType.equals("Female")) { 

            return new Female(); 

        } 

        return null; // 或者抛出异常 

    } 

 

// 客户端代码 

public class Client { 

    private SkinColor skinColor; 

    private Gender gender; 

 

    public void setFactory(PersonFactory factory, String genderType) { 

        skinColor = factory.createSkinColor(); 

        gender = factory.createGender(genderType); 

    } 

 

    public void showPersonInfo() { 

        System.out.println("Skin Color: " + skinColor.getColor()); 

        System.out.println("Gender: " + gender.getGender()); 

    } 

 

    public static void main(String[] args) { 

        Client client = new Client(); 

 

        // 使用白皮肤工厂创建男性 

        client.setFactory(new LightSkinFactory(), "Male"); 

        client.showPersonInfo(); 

 

        // 使用暗皮肤工厂创建女性 

        client.setFactory(new DarkSkinFactory(), "Female"); 

        client.showPersonInfo(); 

    } 

}

 

posted @ 2024-09-14 16:34  芊羽鱼  阅读(22)  评论(0)    收藏  举报