鱼C论坛

 找回密码
 立即注册
查看: 1672|回复: 2

怎么用Java实现?

[复制链接]
发表于 2023-10-24 19:40:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

使用道具 举报

发表于 2023-10-24 19:40:49 | 显示全部楼层
以下是使用Java实现女娲造人的三种工厂模式:

1. 简单工厂模式

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

  1. public class SimpleFactory {
  2.     public static Human createHuman(String type) {
  3.         if ("Black".equals(type)) {
  4.             return new BlackHuman();
  5.         } else if ("White".equals(type)) {
  6.             return new WhiteHuman();
  7.         } else if ("Yellow".equals(type)) {
  8.             return new YellowHuman();
  9.         } else {
  10.             return null;
  11.         }
  12.     }
  13. }
复制代码


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

  1. public interface Human {
  2.     void getColor();
  3.     void talk();
  4. }

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

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

  21. public class YellowHuman implements Human {
  22.     public void getColor() {
  23.         System.out.println("黄色人种的皮肤颜色是黄色的。");
  24.     }
  25.     public void talk() {
  26.         System.out.println("黄种人会说话,一般人听得懂。");
  27.     }
  28. }
复制代码


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

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

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

  9.         Human yellowHuman = SimpleFactory.createHuman("Yellow");
  10.         yellowHuman.getColor();
  11.         yellowHuman.talk();
  12.     }
  13. }
复制代码


2. 工厂方法模式

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

  1. public abstract class AbstractFactory {
  2.     abstract Human createHuman();
  3. }

  4. public class BlackHumanFactory extends AbstractFactory {
  5.     public Human createHuman() {
  6.         return new BlackHuman();
  7.     }
  8. }

  9. public class WhiteHumanFactory extends AbstractFactory {
  10.     public Human createHuman() {
  11.         return new WhiteHuman();
  12.     }
  13. }

  14. public class YellowHumanFactory extends AbstractFactory {
  15.     public Human createHuman() {
  16.         return new YellowHuman();
  17.     }
  18. }
复制代码


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

  1. public interface Human {
  2.     void getColor();
  3.     void talk();
  4. }

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

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

  21. public class YellowHuman implements Human {
  22.     public void getColor() {
  23.         System.out.println("黄色人种的皮肤颜色是黄色的。");
  24.     }
  25.     public void talk() {
  26.         System.out.println("黄种人会说话,一般人听得懂。");
  27.     }
  28. }
复制代码


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

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

  7.         AbstractFactory whiteHumanFactory = new WhiteHumanFactory();
  8.         Human whiteHuman = whiteHumanFactory.createHuman();
  9.         whiteHuman.getColor();
  10.         whiteHuman.talk();

  11.         AbstractFactory yellowHumanFactory = new YellowHumanFactory();
  12.         Human yellowHuman = yellowHumanFactory.createHuman();
  13.         yellowHuman.getColor();
  14.         yellowHuman.talk();
  15.     }
  16. }
复制代码


3. 抽象工厂模式

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

  1. public abstract class AbstractFactory {
  2.     abstract Human createYellowHuman();
  3.     abstract Human createWhiteHuman();
  4.     abstract Human createBlackHuman();
  5. }

  6. public class FemaleFactory extends AbstractFactory {
  7.     public Human createYellowHuman() {
  8.         return new FemaleYellowHuman();
  9.     }
  10.     public Human createWhiteHuman() {
  11.         return new FemaleWhiteHuman();
  12.     }
  13.     public Human createBlackHuman() {
  14.         return new FemaleBlackHuman();
  15.     }
  16. }

  17. public class MaleFactory extends AbstractFactory {
  18.     public Human createYellowHuman() {
  19.         return new MaleYellowHuman();
  20.     }
  21.     public Human createWhiteHuman() {
  22.         return new MaleWhiteHuman();
  23.     }
  24.     public Human createBlackHuman() {
  25.         return new MaleBlackHuman();
  26.     }
  27. }
复制代码


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

  1. public interface Human {
  2.     void getColor();
  3.     void talk();
  4. }

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

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

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

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

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

  45. public class MaleBlackHuman implements Human {
  46.     public void getColor() {
  47.         System.out.println("黑种男性的皮肤颜色是黑色的。");
  48.     }
  49.     public void talk() {
  50.         System.out.println("黑种男性会说话,一般人听不懂。");
  51.     }
  52. }
复制代码


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

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

  7.         AbstractFactory femaleFactory = new FemaleFactory();
  8.         Human femaleWhiteHuman = femaleFactory.createWhiteHuman();
  9.         femaleWhiteHuman.getColor();
  10.         femaleWhiteHuman.talk();

  11.         AbstractFactory maleFactory2 = new MaleFactory();
  12.         Human maleBlackHuman = maleFactory2.createBlackHuman();
  13.         maleBlackHuman.getColor();
  14.         maleBlackHuman.talk();
  15.     }
  16. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-29 17:48:23 | 显示全部楼层
isdkz 发表于 2023-10-24 19:40
以下是使用Java实现女娲造人的三种工厂模式:

1. 简单工厂模式

类图怎么写?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 00:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表