从红警中来学习工厂方法 vs. 抽象工厂
工厂方法 vs. 抽象工厂 (红色警戒版)
工厂方法 (Factory Method) - 单位的特殊状态转换
场景: 处理不同兵种单位转换到其“特殊形态”的逻辑。
-
产品 (Product) - 单位状态
InfantryState
(抽象产品:步兵状态)DeployedState
(具体产品:美国大兵的部署状态)ChargingState
(具体产品:磁暴步兵的充电状态)
-
创建者 (Creator) - 步兵单位
Infantry
(抽象创建者:步兵单位基类)- 包含工厂方法
createSpecialState()
- 包含工厂方法
GI
(具体创建者:美国大兵)- 实现
createSpecialState()
返回DeployedState
- 实现
TeslaTrooper
(具体创建者:磁暴步兵)- 实现
createSpecialState()
返回ChargingState
- 实现
-
扩展任务:增加“飞行兵”
- 新增:
FlyingState
(产品类),RocketTrooper
(创建者类)。 - 修改:无。
- 新增:
核心思想: 一个创建者(GI
)负责创建一个与之对应的产品(DeployedState
)。扩展时只需增加新的创建者和产品。
抽象工厂 (Abstract Factory) - 阵营的建筑和单位生产
场景: 确保玩家选择一个阵营后,所有生产出的建筑和单位都属于该阵营。
-
抽象工厂 (Abstract Factory)
FactionBase
(阵营基地接口)- 包含
create_barracks()
和create_vehicle_factory()
方法。
- 包含
-
具体工厂 (Concrete Factory)
AlliedBase
(盟军基地)SovietBase
(苏军基地)
-
产品家族 (Product Family)
- 产品A (兵营)
Barracks
(抽象产品)AlliedBarracks
(具体产品 - 盟军兵营)SovietBarracks
(具体产品 - 苏军兵营)
- 产品B (战车工厂)
VehicleFactory
(抽象产品)AlliedWarFactory
(具体产品 - 盟军战车工厂)SovietWarFactory
(具体产品 - 苏军战车工厂)
- 产品A (兵营)
-
扩展任务:增加“尤里”阵营
- 新增:
YuriBase
(工厂),YuriBarracks
(产品A),YuriWarFactory
(产品B)。 - 修改:无。
- 新增:
核心思想: 一个工厂(AlliedBase
)负责创建一整套相互关联的产品(AlliedBarracks
, AlliedWarFactory
),保证了产品家族的一致性。