豪在这学python 发表于 2023-10-24 19:40:00

怎么用Java实现?

5.东汉《风俗通》记录了这样一则神话故事:“开天辟地,未有人民,女娲搏黄土做人”,即女娲造人的故事。女娲是如何造人的呢?首先,女娲采集黄土捏成人的形状,然后放到八卦炉中烧制,最后放到大地上生长。由于女娲是第一次做人,经验不足,对火候的把控不准确,柴火放多了,火太旺,七七四十九天之后,造好拿出来一看,人都被烤黑了,于是黑种人就诞生了;然后女娲开始少放柴火,小火慢炖,又过了七七四十九天,拿出来一看,人还没烧制成熟,于是白种人就诞生了;最后,女娲有经验了,把控好火的大小,就这样又过了七七四十九天,打开八卦炉一看,这次刚刚好,于是黄种人就诞生了。请分别使用简单工厂模式、工厂方法模式和抽象工厂模式模拟实现女娲造人。请画出三种工厂方法的类图,编写程序实现女娲造人过程。

isdkz 发表于 2023-10-24 19:40:49

以下是使用Java实现女娲造人的三种工厂模式:

1. 简单工厂模式

首先定义一个简单工厂类,根据传入的参数不同,创建不同的人种对象。

public class SimpleFactory {
    public static Human createHuman(String type) {
      if ("Black".equals(type)) {
            return new BlackHuman();
      } else if ("White".equals(type)) {
            return new WhiteHuman();
      } else if ("Yellow".equals(type)) {
            return new YellowHuman();
      } else {
            return null;
      }
    }
}


然后定义一个Human接口,以及三个不同的人种类实现该接口。

public interface Human {
    void getColor();
    void talk();
}

public class BlackHuman implements Human {
    public void getColor() {
      System.out.println("黑色人种的皮肤颜色是黑色的。");
    }
    public void talk() {
      System.out.println("黑人会说话,一般人听不懂。");
    }
}

public class WhiteHuman implements Human {
    public void getColor() {
      System.out.println("白色人种的皮肤颜色是白色的。");
    }
    public void talk() {
      System.out.println("白人会说话,一般人听得懂。");
    }
}

public class YellowHuman implements Human {
    public void getColor() {
      System.out.println("黄色人种的皮肤颜色是黄色的。");
    }
    public void talk() {
      System.out.println("黄种人会说话,一般人听得懂。");
    }
}


最后在Main函数中调用简单工厂类创建不同的人种对象。

public class Main {
    public static void main(String[] args) {
      Human blackHuman = SimpleFactory.createHuman("Black");
      blackHuman.getColor();
      blackHuman.talk();

      Human whiteHuman = SimpleFactory.createHuman("White");
      whiteHuman.getColor();
      whiteHuman.talk();

      Human yellowHuman = SimpleFactory.createHuman("Yellow");
      yellowHuman.getColor();
      yellowHuman.talk();
    }
}


2. 工厂方法模式

首先定义一个抽象工厂类,具体的工厂类继承该抽象工厂类,实现创建不同人种对象的方法。

public abstract class AbstractFactory {
    abstract Human createHuman();
}

public class BlackHumanFactory extends AbstractFactory {
    public Human createHuman() {
      return new BlackHuman();
    }
}

public class WhiteHumanFactory extends AbstractFactory {
    public Human createHuman() {
      return new WhiteHuman();
    }
}

public class YellowHumanFactory extends AbstractFactory {
    public Human createHuman() {
      return new YellowHuman();
    }
}


然后定义一个Human接口,以及三个不同的人种类实现该接口。

public interface Human {
    void getColor();
    void talk();
}

public class BlackHuman implements Human {
    public void getColor() {
      System.out.println("黑色人种的皮肤颜色是黑色的。");
    }
    public void talk() {
      System.out.println("黑人会说话,一般人听不懂。");
    }
}

public class WhiteHuman implements Human {
    public void getColor() {
      System.out.println("白色人种的皮肤颜色是白色的。");
    }
    public void talk() {
      System.out.println("白人会说话,一般人听得懂。");
    }
}

public class YellowHuman implements Human {
    public void getColor() {
      System.out.println("黄色人种的皮肤颜色是黄色的。");
    }
    public void talk() {
      System.out.println("黄种人会说话,一般人听得懂。");
    }
}


最后在Main函数中调用具体的工厂类创建不同的人种对象。

public class Main {
    public static void main(String[] args) {
      AbstractFactory blackHumanFactory = new BlackHumanFactory();
      Human blackHuman = blackHumanFactory.createHuman();
      blackHuman.getColor();
      blackHuman.talk();

      AbstractFactory whiteHumanFactory = new WhiteHumanFactory();
      Human whiteHuman = whiteHumanFactory.createHuman();
      whiteHuman.getColor();
      whiteHuman.talk();

      AbstractFactory yellowHumanFactory = new YellowHumanFactory();
      Human yellowHuman = yellowHumanFactory.createHuman();
      yellowHuman.getColor();
      yellowHuman.talk();
    }
}


3. 抽象工厂模式

首先定义一个抽象工厂类,具体的工厂类继承该抽象工厂类,实现创建不同人种对象的方法。

public abstract class AbstractFactory {
    abstract Human createYellowHuman();
    abstract Human createWhiteHuman();
    abstract Human createBlackHuman();
}

public class FemaleFactory extends AbstractFactory {
    public Human createYellowHuman() {
      return new FemaleYellowHuman();
    }
    public Human createWhiteHuman() {
      return new FemaleWhiteHuman();
    }
    public Human createBlackHuman() {
      return new FemaleBlackHuman();
    }
}

public class MaleFactory extends AbstractFactory {
    public Human createYellowHuman() {
      return new MaleYellowHuman();
    }
    public Human createWhiteHuman() {
      return new MaleWhiteHuman();
    }
    public Human createBlackHuman() {
      return new MaleBlackHuman();
    }
}


然后定义一个Human接口,以及六个不同的人种类实现该接口。

public interface Human {
    void getColor();
    void talk();
}

public class FemaleYellowHuman implements Human {
    public void getColor() {
      System.out.println("黄种女性的皮肤颜色是黄色的。");
    }
    public void talk() {
      System.out.println("黄种女性会说话,一般人听得懂。");
    }
}

public class MaleYellowHuman implements Human {
    public void getColor() {
      System.out.println("黄种男性的皮肤颜色是黄色的。");
    }
    public void talk() {
      System.out.println("黄种男性会说话,一般人听得懂。");
    }
}

public class FemaleWhiteHuman implements Human {
    public void getColor() {
      System.out.println("白种女性的皮肤颜色是白色的。");
    }
    public void talk() {
      System.out.println("白种女性会说话,一般人听得懂。");
    }
}

public class MaleWhiteHuman implements Human {
    public void getColor() {
      System.out.println("白种男性的皮肤颜色是白色的。");
    }
    public void talk() {
      System.out.println("白种男性会说话,一般人听得懂。");
    }
}

public class FemaleBlackHuman implements Human {
    public void getColor() {
      System.out.println("黑种女性的皮肤颜色是黑色的。");
    }
    public void talk() {
      System.out.println("黑种女性会说话,一般人听不懂。");
    }
}

public class MaleBlackHuman implements Human {
    public void getColor() {
      System.out.println("黑种男性的皮肤颜色是黑色的。");
    }
    public void talk() {
      System.out.println("黑种男性会说话,一般人听不懂。");
    }
}


最后在Main函数中调用具体的工厂类创建不同的人种对象。

public class Main {
    public static void main(String[] args) {
      AbstractFactory maleFactory = new MaleFactory();
      Human maleYellowHuman = maleFactory.createYellowHuman();
      maleYellowHuman.getColor();
      maleYellowHuman.talk();

      AbstractFactory femaleFactory = new FemaleFactory();
      Human femaleWhiteHuman = femaleFactory.createWhiteHuman();
      femaleWhiteHuman.getColor();
      femaleWhiteHuman.talk();

      AbstractFactory maleFactory2 = new MaleFactory();
      Human maleBlackHuman = maleFactory2.createBlackHuman();
      maleBlackHuman.getColor();
      maleBlackHuman.talk();
    }
}

豪在这学python 发表于 2023-10-29 17:48:23

isdkz 发表于 2023-10-24 19:40
以下是使用Java实现女娲造人的三种工厂模式:

1. 简单工厂模式


类图怎么写?
页: [1]
查看完整版本: 怎么用Java实现?