[英]c# how to approach Abstract Factory with different signatures (?)
我想弄清楚如何在游戏中创建不同的坏人。
假设我有 2 个派系。 圣骑士和盗贼,以及每个派系的 3 种战士类型
我有一个抽象工厂来生成他们携带的设备,但我不确定如何让它工作。 这是我所拥有的
enum PaladinWarrior
{
Squire,
Novice,
Knight
}
/// <summary>
/// abstract weapon factory
/// </summary>
abstract class EquipmentFactory
{
public abstract IWeapon GetWeapon(Enum warriorType);
/// maybe some other methods like armor and hp
}
/// <summary>
/// concrete weapon factory
/// </summary>
class PaladinWeaponFactory : EquipmentFactory
{
public override IWeapon GetWeapon(PaladinWarrior warriorType)
{
switch (warriorType)
{
case PaladinWarrior.Squire:
return new ShortSword();
case PaladinWarrior.Novice:
return new LongSword();
case PaladinWarrior.Knight:
return new GreatSword();
default:
break;
}
}
}
/// another factory for the thieves, etc.
我面临的问题是,通过指定 Enum 类型,它不再匹配抽象工厂,并且不会直接使其工作。 换句话说,抽象工厂的 getWeapon 与 Palading 的签名不同,我不知道如何处理。
我想知道哪种模式/工作流程会更好? 考虑到我有多个派系,每个派系都需要不同的战士(当然,装备不同)。
编辑:我想要工厂,所以我可以像这样创建一个战士:
Warrior goodGuy = new Warrior(PaladinWarrior.Squire)
Warrior badGuy = new Warrior(ThievesWarrior.BBEV)
并让战士类能够制造盔甲和装备。 我不知道除了工厂之外还有什么其他模式可以做到这一点。
由于问题是在游戏中添加战士类型,我将从游戏开发的角度来回答
使用不同的枚举和不同的工厂来创建战士的方法过于复杂,合并枚举并且只有一个工厂来创建整个Warrior
对象会简单得多。
然而,在“适当的游戏开发”中,即使这样也不是一个好主意,因为您希望将添加和修改这些战士类型的选择权交给不想(也不应该)修改代码的设计师。
相反,您想让您的方法数据驱动,这意味着创建Warrior
所需的所有数据都使用预定义格式(可以是常见的格式,如 JSON 或完全自定义的格式)存储在外部文件或数据库中)。 然后您的代码所要做的就是读入该数据并基于它创建对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.