工厂模式是创建型设计模式中最常用、最经典的之一,非常适合在实际工程中使用,尤其当我们希望将对象创建过程从使用者中解耦时。
🧱 一、工厂模式是什么?
用工厂方法代替
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++ 时可以通过基类指针来统一管理对象。
1574

被折叠的 条评论
为什么被折叠?



