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