270
社区成员
发帖
与我相关
我的任务
分享
我的项目最终形成了一个以Adventurer为核心,通过继承、接口和组合构建起来的清晰架构。
核心实体层:Adventurer类是所有业务逻辑的核心载体。
物品/技能体系:通过Item和Spell两个抽象基类,派生出具体的Bottle, Equipment, HealSpell等子类,利用继承来共享属性和行为。Usable接口则通过多态,屏蔽了物品和技能在使用上的差异。
创建与解析:ItemFactory工厂类负责所有物品和技能的创建,实现了创建逻辑的解耦。Parser和Lexer则专门负责lr指令的复杂解析,将特定功能模块化。
主控层:MainClass作为程序的入口和调度中心,负责解析指令、调用相应对象的方法。
在引入继承和多态时。我将Bottle和Equipment抽象为Item父类,这极大地简化了物品管理。引入Usable接口后。Adventurer的useItem方法不再需要关心使用者究竟是药水还是法术,只需调用其use方法即可。这让我深刻体会到“面向接口编程”的优雅之处——它让代码的耦合度大大降低,扩展性显著增强。
最后的lr指令,引入Parser和Lexer,而不是在MainClass中用字符串分割硬啃。这体现了单一职责原则:MainClass负责流程控制,Parser负责语法解析。这使得代码结构更加清晰,即便未来要支持更复杂的指令,也只需扩展Parser即可。
起初,我认为为每个方法编写测试用例是件繁琐的事。但随着项目复杂度的提升,JUnit的作用与强大之处逐渐显现。
最大的感受是重构的信心。当我想优化fight方法的逻辑,或调整其他方法的实现时,只需大胆修改,然后运行一遍单元测试。只要所有测试用例通过,我就能确信我的修改没有破坏原有的功能。即便出现问题,也能够方便的定位bug。
此外,编写测试的过程也强迫我思考代码的边界条件。为了覆盖各种情况,我必须考虑null输入、空列表、极限值等情况,这使得我的主代码更加健壮。JUnit不仅是测试工具,也能提高我的代码质量。
#3. 学习心得
从C语言的面向过程思维到Java的面向对象,最大的转变是学习到了封装 继承 多态的三大原则。
封装让我认识到数据和操作它的方法应该是一个整体。Adventurer的hp不应该被外部随意修改,而应通过takeDamage或setHp等方法来控制,这保证了对象状态的有效性。
继承则教会我如何抽象和复用。HpBottle和AtkBottle都是Bottle,它们共享了Bottle的通用逻辑,这正是DRY(Don't Repeat Yourself)原则的体现。
多态是整个OO思想的精髓。通过Usable接口,我实现了统一的调用方式,让代码更加灵活和通用。这是一种“依赖于抽象而非具体”的高层次思维。
#4.建议
希望能够更早引入设计模式的思想,增强讨论区的活跃度。