从女娲造人到代码实现:揭秘工厂方法模式的神奇应用
工厂方法模式是一种设计模式,用于创建对象,但允许子类决定实例化哪一个类。这种模式让类的实例化推迟到子类。在你的例子中,可以将神话传说中的女娲娘娘造人过程用工厂方法模式来描述。 工厂方法模式的结构 1. 抽象产品 (Product): 定义所有具体产品都必须实现的接口或基类。 2. 具体产品 (Concrete Product): 实现抽象产品接口的具体类。 3. 抽象工厂 (Creator): 定义一个创建产品的接口,但不实现它。 4. 具体工厂 (Concrete Creator): 实现抽象工厂接口,负责创建具体的产品。 5. 用户 (Client): 使用抽象工厂和抽象产品,但不关心具体实现。 应用到神话传说中的女娲造人 1. 抽象产品 (Product): 人 2. 具体产品 (Concrete Product): - 男人 - 女人 3. 抽象工厂 (Creator): 女娲神绳 4. 具体工厂 (Concrete Creator): - 阳绳(造男人) - 阴绳(造女人) 5. 用户 (Client): 玉皇大帝 代码示例 ```python # 抽象产品: 人 class Person: def __init__(self, name): self.name = name def introduce(self): raise NotImplementedError("This method should be implemented by subclasses") # 具体产品: 男人 class Man(Person): def introduce(self): return f"我是男人,名叫{self.name}" # 具体产品: 女人 class Woman(Person): def introduce(self): return f"我是女人,名叫{self.name}" # 抽象工厂: 女娲神绳 class NvWaRope: def create_person(self): raise NotImplementedError("This method should be implemented by subclasses") # 具体工厂: 阳绳 class YangRope(NvWaRope): def create_person(self): return Man("亚当") # 具体工厂: 阴绳 class YinRope(NvWaRope): def create_person(self): return Woman("夏娃") # 用户: 玉皇大帝 class JadeEmperor: def create_people(self, rope): person = rope.create_person() print(person.introduce()) # 示例使用 jade_emperor = JadeEmperor() yang_rope = YangRope() yin_rope = YinRope() jade_emperor.create_people(yang_rope) # 输出: 我是男人,名叫亚当 jade_emperor.create_people(yin_rope) # 输出: 我是女人,名叫夏娃 ``` 解释 - Person 是抽象产品,定义了 `introduce` 方法。 - Man 和 Woman 是具体产品,分别实现了 `introduce` 方法。 - NvWaRope 是抽象工厂,定义了 `create_person` 方法。 - YangRope 和 YinRope 是具体工厂,分别实现了 `create_person` 方法,创建具体的 Man 或 Woman。 - JadeEmperor 是用户,使用具体工厂来创建具体产品,并调用其方法。 通过这种方式,玉皇大帝可以使用不同的神绳(具体工厂)来创建不同类型的人(具体产品),而不需要知道具体的实现细节。 ######[AI写代码神器 | 765点数解答 | 2024-10-17 17:07:50]
- Java 实现计算机硬件模拟:从 PCI 设备到主板、计算机的启动与关闭(字节豆包 | 716点数解答 | 2024-12-08 23:38:38)325
- Java 代码:模拟计算机主板启动与关闭 PCI 设备全流程(字节豆包 | 637点数解答 | 2024-12-09 08:31:54)293
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- Java 实战:Vehicle 类与 User 类实现机动车速度功率控制( | 968点数解答 | 2024-03-12 11:26:25)542
- Express 应用创建与数据查询 API 实现:附代码示例与注意要点(字节豆包 | 387点数解答 | 2024-12-05 09:09:59)226
- Java 实战:动物类、接口与继承实现鸟儿吃虫和飞翔功能(字节豆包 | 183点数解答 | 2024-09-19 15:53:55)285
- Java 实战:动物类、接口与继承,实现鸟儿吃虫与飞翔功能(字节豆包 | 184点数解答 | 2024-09-19 16:45:48)309
- Java 实现 BankAccount 类:账户余额管理与测试全解析(字节豆包 | 420点数解答 | 2024-10-11 08:48:21)315
- Java 编程:实现教师与学生类的创建、继承及属性操作(字节豆包 | 745点数解答 | 2024-10-16 18:40:42)390
- Java 实现 Circle 类:全面封装圆的属性与方法(字节豆包 | 256点数解答 | 2024-10-27 16:34:37)243
- Java 实现继承关系:Fu 类、Zi 类与测试类 Example04 代码解析及注意要点(字节豆包 | 251点数解答 | 2024-12-12 09:36:45)246
- Java实现银行账户类:含账户余额操作与测试代码(DeepSeek | 711点数解答 | 2025-03-23 21:38:57)258