一 工厂方法模式是什么?
一句话:
定义一个创建对象的接口, 让子类决定实例化哪一个类. 工厂方法使一个类实例化延迟到其子类
简单理解:
- 有一个抽象工厂, 只规定”能造什么”
- 具体造哪个, 由具体工厂决定
- 你只跟工厂打交道, 不是直接
new物品
适用 Unity 场景:
- 生成敌人(小怪\BOSS\飞行怪)
- 生成武器(剑\弓\法杖\)
- 生成道具(血瓶\蓝瓶\金币)
- 动态切换不同玩法模块
二 完整Unity示例: 敌人生成
我们要做:
- 小怪 EnemySlime
- 精英 EnemyOrc
- Boss EnemyDragon
用工厂方法统一生成, 不直接
new - 抽象产品(Enemy)
所有敌人共同的接口\基类
- 具体产品(各类敌人)
- 抽象工厂(EnemyFactory)
规定工厂必须能”造敌人”, 但不指定造谁
- 具体工厂
每个工厂只负责造一种敌人
- Unity 客户端调用
输出
三 工厂方法模式的结构总结
- Product(抽象产品): Enemy
- ConcreteProduct(具体产品): Slime\Orc\Dragon
- Factory(抽象工厂): EnemyFactory
- ConcreteFactory(具体工厂): SlimeFactory\OrcFactory\DragonFactory
四 工厂方法 vs 简单工厂
- 简单工厂: 一个工厂造所有东西
- 工厂方法: 一个东西对应一个工厂
优点:
- 符合开闭原则: 加新敌人只需加新工厂, 不修改旧代码
- 代码结构清晰, 易于扩展
- 方便替换不同生成逻辑(例如普通怪 vs 强化怪)
五 更贴近 Unity 实际用法(生成 Prefab)
实际游戏中我们是实例化Prefab, 工厂可以这样写:
调用:
这就是 Unity 里最常用\最实用的工厂写法.
六 一句话总结
工厂方法 = 抽象工厂 + 具体工厂一对一造对象, 让创建逻辑可扩展\可替换\不混乱