一 工厂方法模式是什么?

一句话:
定义一个创建对象的接口, 让子类决定实例化哪一个类. 工厂方法使一个类实例化延迟到其子类
简单理解:
  • 有一个抽象工厂, 只规定”能造什么”
  • 具体造哪个, 由具体工厂决定
  • 你只跟工厂打交道, 不是直接 new 物品
适用 Unity 场景:
  • 生成敌人(小怪\BOSS\飞行怪)
  • 生成武器(剑\弓\法杖\)
  • 生成道具(血瓶\蓝瓶\金币)
  • 动态切换不同玩法模块

二 完整Unity示例: 敌人生成

我们要做:
  • 小怪 EnemySlime
  • 精英 EnemyOrc
  • Boss EnemyDragon
用工厂方法统一生成, 不直接 new
  1. 抽象产品(Enemy)
所有敌人共同的接口\基类
  1. 具体产品(各类敌人)
  1. 抽象工厂(EnemyFactory)
规定工厂必须能”造敌人”, 但不指定造谁
  1. 具体工厂
每个工厂只负责造一种敌人
  1. Unity 客户端调用
输出

三 工厂方法模式的结构总结

  1. Product(抽象产品): Enemy
  1. ConcreteProduct(具体产品): Slime\Orc\Dragon
  1. Factory(抽象工厂): EnemyFactory
  1. ConcreteFactory(具体工厂): SlimeFactory\OrcFactory\DragonFactory

四 工厂方法 vs 简单工厂

  • 简单工厂: 一个工厂造所有东西
  • 工厂方法: 一个东西对应一个工厂
优点:
  • 符合开闭原则: 加新敌人只需加新工厂, 不修改旧代码
  • 代码结构清晰, 易于扩展
  • 方便替换不同生成逻辑(例如普通怪 vs 强化怪)

五 更贴近 Unity 实际用法(生成 Prefab)

实际游戏中我们是实例化Prefab, 工厂可以这样写:
调用:
这就是 Unity 里最常用\最实用的工厂写法.

六 一句话总结

工厂方法 = 抽象工厂 + 具体工厂一对一造对象, 让创建逻辑可扩展\可替换\不混乱