11.13

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

实验要求:

  1. 画出对应的类图;

  2. 提交源代码;

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.注意编程规范。

posted @ 2024-11-13 08:37  aallofitisst  阅读(18)  评论(0)    收藏  举报