截止到2023-7-8本人在GCL1,RCL3的阶段,代码还在建设ing,思考有限

背景

在Screeps中,可以自定义自己的兵种,兵种可由自己定义

但是兵种的生产代码由Spawn(基地)的spawnCreep 方法来进行兵种创建

这样会使得兵种的生产与Spawn的调用关系强耦合

在代码调用关系上无法以较低的代码成本进行兵种的动态扩张

需求

  1. 只需要新增一个新兵种的信息,就可以使得兵种支持生产

  2. 后续只需要修改这个兵种信息,即可改变兵种属性

  3. 后续允许多个Spawn类调用

设计

将兵种工厂由抽象工厂模式进行设计

由于兵种信息固定单一,便可将兵种信息抽象为CreepsRoleMeta 的 抽象类

之后通过自己编写的兵种信息去继承这个CreepsRoleMeta类即可

最后在CreepsFactory类中,通过

  1. CreepsRoleMeta类读取兵种信息

  2. StructureSpawn类进行兵种生产的方法调用

抽象工厂模式

兵种工厂设计图.drawio.svg

通过将StructureSpawn作为参数传递给CreepsFactory,做到后续支持多Spawn

之后将CreepsRoleMeta组合到creepsFactory中

使其可以调用通过CreepsRoleMeta继承下去的各个子类,进行兵种生产

结果

对于新增兵种,仅需要继承一个CreepsRoleMeta类,然后完善对应的属性即可

对于修改兵种,修改其对应的Meta信息即可

对Spawn类,在外部调用时,循环遍历Spawn,并传入方法即可