271
社区成员
发帖
与我相关
我的任务
分享
MainClass:程序的入口,也是处理指令的地方。
Adventurer:表示冒险者,维护基本属性、持有物、已学法术与背包;提供状态变更与查询接口。
Backpack:记录当前携带的 weaponId/armourId/瓶子队列,提供携带/移除规则。
Usable:实现可用对象接口(id、canUse、use、getTypeName)。
Bottle:药水基类,保存 effect 与 manaCost。
HpBottle:治疗血量。
AtkBottle:增加攻击。
DefBottle:增加防御。
ManaBottle:增加魔力。
Spell:法术基类,保存 manaCost 与 power。
AttackSpell:造成伤害并消耗施法者魔力。
HealSpell:治疗并消耗施法者魔力。
Equipment:装备基类。
Weapon / Armour:具体装备分类,武器和护甲。
Sword / Magicbook:武器具体实现,剑和魔法书。
AdventurerManager:维护雇佣图、提供关系查询、触发冒险者的援助。
Fight:统一处理所有战斗(检查状态、关系校验、伤害计算、死亡奖励计算)。
不用一个“大型测试工厂”去生成复杂对象,而是把对象构造拆成可组合的小函数来测试,每个测试只关心其中1-2个字段。把构造拆小,可以让测试只设置关心的字段,其他字段用合理默认值。
对于那些容易出错的“否定情况”,除了测“能”的正向情况,还得专门写一条测“不能”的反向测试。这样正反都覆盖到,如果不小心把“能”和“不能”弄反了,“能”的正向测试可能还能过,但“不能”的反向测试就会报错,容易发现问题。
以对象为中心建模:把现实问题分解为状态与行为封装在对象里,类之间通过方法调用协作。继承用于抽象相似行为,多态使得Fight/Manager可以统一处理不同子类实例(通过接口Usable或instanceof判断)。
使用组合往往比继承更简单:如Adventurer通过组合Backpack、Map<itemId,Object>来管理复杂状态,有助于职责分离与单一责任原则。
其它注意点:保持类的职责单一;使用接口与封装减少直接类型判断。