我正在开发一个可定制船只的太空射击游戏.您可以通过一对雷达图表*增加船舶任意数量的物体的强度.在内部,我将每个船舶表示为子类SpaceObject类,该类包含描述该船的各种属性的ShipInfo.
我想开发一个相对简单的API,它允许我为所有船舶属性(其中一些是基础实际属性集的简化)提供相对强度的块(从雷达图允许的最小值到最大值).并获得一个ShipInfo类,我可以给一个PlayerShip类(即实例化为玩家船的对象).
我可以自己开发代码来进行简化和实际属性之间的转换,但是我想提供一些建议来提供哪种架构来最小化与这个转换器代码交互的痛苦(即没有带有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; }