270
社区成员
发帖
与我相关
我的任务
分享项目最终UML类图如下:

采用模块化的思想,我的最终架构可以分为以下几个核心模块:
Main :程序入口,仅用于初始化Scanner、冒险者容器advs、关系管理器rm,并创建总控制器CommandUtil。CommandUtil :系统的总控制器,功能如下:Main接收Scanner,通过switch语句分发指令( "aa", "ab", "fight", "use" 等)。Adventurer 类的业务方法和 RelationManager 的关系处理方法。Adventurer :管理冒险者的所有属性和行为。hitPoint等)及状态。items :存储冒险者拥有的所有物品。bottleBackpack :药水瓶背包,采用LinkedHashMap这一数据结构,通过重写removeEldestEntry方法,实现了“最多携带10个药水瓶,超出时移除最旧条目”的逻辑。spells 存储学会的法术,superior和subordinates记录雇佣关系。addBottle, addEquipment, learnSpell, takeItem 等所有逻辑。Item (抽象类) :所有物品的顶层基类。Usable (接口) :可用物品接口。Bottle (抽象类) :继承于Item,并实现了Usable接口。派生出HpBottle等具体药水类。Equipment (抽象类) :继承自Item。派生出Armour 和Weapon (抽象类)。Weapon 进一步派生出Sword 和Magicbook。Spell (抽象类) :实现了Usable接口。派生出HealSpell 和AttackSpell。RelationManager :负责处理冒险者间的雇佣关系,提供关系的添加、删除、死亡处理等操作。LrParser :配合CommandUtil 使用的递归下降解析器,用于解析"lr"指令,并通过调用rm 的方法建立雇佣关系。Factory:实现了工厂模式,用于创建对象实例。CommandUtil 的添加:最初对指令的处理全部由Main类完成,随着指令的增加,Main类变得过于臃肿,且超出代码行数限制,因此引入该类专门负责读取和解析指令,使Main类仅仅作为程序入口。Factory 的添加:随着迭代的进行,Bottle和Equipment等都有了多个子类,这时需要根据某一物品所属的子类名来相应地创建对象,为了降低项目的耦合度,便添加了Factory工厂类来专门创建对象。RelationManager 的添加:第六次作业引入了雇佣关系,需要管理各个冒险者之间的关系,为避免Adventurer类中耦合度过高,引入了该类来统一完成关系的添加、删除、查询等操作。if(a),必须再改成if(a!=0),此外还要多注意操作的某个对象是否为null,否则程序可能会抛出异常。Factory类,就是对“工厂模式”的一次具体实践,它帮助我将“对象的创建”与“对象的使用”解耦,降低了代码耦合度。在听课过程中某些概念不好理解,比如“观察者模式”等,只听概念的话有一种云里雾里的感觉,希望以后多讲一些相关代码示例,从而提高学习效率。