我正在开发一款带有可定制飞船的太空射击游戏。您可以通过一对雷达图*增加船舶任意数量的强度。在内部,我将每艘船表示为子类 SpaceObject
类,其中包含描述该船各种属性的 ShipInfo
。
我想开发一个相对简单的 API,让我可以为所有船舶属性(其中一些是基础实际集合的简化)输入一组相对强度(从雷达图允许的最小值到最大值)属性)并取回我可以提供给 PlayerShip
类的 ShipInfo 类(即实例化为玩家飞船的对象)。
我可以自己开发代码来完成简化属性和实际属性之间的转换,但我想要一些关于提供哪种架构的建议,以最大限度地减少与此翻译器代码交互的痛苦(即没有 5+ 的方法争论或其他一些废话)。有人有什么想法吗?
*=尚未实际实现,但这是计划。
最佳答案
Builder 模式呢?您可以在 ShipInfo 类上使用静态 FillDefaults
方法,然后通过返回您正在使用的实例的实例方法分配 ShipInfo 的每个属性,如下所示:
ShipInfo.FillDefaults().CalculateSomething(50).AssignName("Testing...").RelativeFiringPower(10).ApplyTo(myShip);
在 ShipInfo 中,这看起来像:
public static ShipInfo FillDefaults()
{
ShipInfo newInstance = ...;
// Do some default setup here
return newInstance;
}
public ShipInfo CalculateSomething(int basis)
{
// Do some calculation
// Assign some values internally
return this;
}
// Keep following this pattern of methods
public void ApplyTo(SpaceObject obj)
{
// Some checks here if you want
obj.ShipInfo = this;
}
关于c# - 这个问题的良好代码架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2855897/