简单工厂模式

部署运行你感兴趣的模型镜像

工厂模式是创建型设计模式中最常用、最经典的之一,非常适合在实际工程中使用,尤其当我们希望将对象创建过程从使用者中解耦时。


🧱 一、工厂模式是什么?

用工厂方法代替 new 操作,隐藏对象创建的细节,让代码更加灵活和可扩展。

你不再手动 new 一个对象,而是通过工厂来**“制造”**对象。


🔧 二、常见的工厂模式有三种:

名称说明
简单工厂(Simple Factory)不属于 GoF 的 23 个设计模式,但最常用
工厂方法(Factory Method)每种产品有自己专属工厂
抽象工厂(Abstract Factory)生产“产品族”

🎯 三、例子:我们来造“武器”

场景:一个游戏里,我们可能会制造不同种类的武器(枪、刀、火箭筒等)


✅ 1. 简单工厂模式(Simple Factory)

UML 结构图:

          +------------------+
          |   WeaponFactory  |  <== 工厂类
          +------------------+
          | +create_weapon() |
                   |
        +----------+----------+
        |                     |
  +-----------+        +-----------+
  |   Gun     |        |   Knife   |   <== 产品类
  +-----------+        +-----------+

示例代码(Python):

# 产品类
class Weapon:
    def attack(self):
        pass

class Gun(Weapon):
    def attack(self):
        print("Bang! Shoot with a gun.")

class Knife(Weapon):
    def attack(self):
        print("Slash! Attack with a knife.")

# 简单工厂类
class WeaponFactory:
    @staticmethod
    def create_weapon(weapon_type):
        if weapon_type == "gun":
            return Gun()
        elif weapon_type == "knife":
            return Knife()
        else:
            raise ValueError("Unknown weapon type")

# 使用工厂创建对象
weapon = WeaponFactory.create_weapon("gun")
weapon.attack()

✅ 2. 工厂方法模式(Factory Method)

每种武器都有自己的专属工厂类,更符合开闭原则。

# 抽象产品
class Weapon:
    def attack(self):
        pass

# 具体产品
class Gun(Weapon):
    def attack(self):
        print("Bang! Gun shooting.")

class Knife(Weapon):
    def attack(self):
        print("Slash! Knife attacking.")

# 抽象工厂
class WeaponFactory:
    def create_weapon(self):
        pass

# 具体工厂
class GunFactory(WeaponFactory):
    def create_weapon(self):
        return Gun()

class KnifeFactory(WeaponFactory):
    def create_weapon(self):
        return Knife()

# 使用
factory = GunFactory()
weapon = factory.create_weapon()
weapon.attack()

🧠 总结:何时用工厂模式?

情况建议使用
你不想暴露具体类的创建细节✅ 使用工厂
类的实例化逻辑比较复杂✅ 使用工厂
产品种类会扩展或变化✅ 工厂方法优于简单工厂
需要创建产品族(多个相关产品)✅ 抽象工厂模式

📦 拓展建议

如果你用的是 C++ 或 Java,工厂模式和虚函数 / 接口 + 多态是密不可分的。比如用 C++ 时可以通过基类指针来统一管理对象。

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值