307
社区成员
发帖
与我相关
我的任务
分享代码架构如图:

采用了模块化的思想,主要通过三个核心模块来实现架构。
Main:程序的唯一入口,将数据读入inputinfo数组之后调用input类的方法处理数据,同时input类通过递归下降法解析lr的指令。
input:这里采用swich-case结构处理指令,每个指令对应一个方法,方法内实现具体的功能。
Lexer: 词法分析器,负责将输入的字符串分割成一个个的单词(token),并提供给input类进行语法分析。
Adventurer: 冒险者类,包含冒险者的基本属性和方法。
AdventureContainer: 冒险者容器类,负责管理所有冒险者的创建、删除和查询等操作。
Factory:工厂类,负责统一冒险者携带物品的创建,应用工厂模式。
Employer,Employee:雇佣者和被雇佣者的类,二者形成观察者模式。
Item: 接口实现,管理Bottle和Equipment类。
Usage: 接口实现,管理Bottle和Spell类。
stone:单例模式实现,保证全局只有一个stone实例,确保唯一性和一致性。
MagicBook: 管理魔法书类。
在课程初期,采用的是较为简单的结构,随着课程的深入,类的数量在不断的扩展,为了方便管理引入了接口、工厂模式。为了满足援助指令的需求,引入了单例模式和观察者模式。观察者模式通过上级通知下级,下级响应上级的方式实现援助功能。单例模式确保了stone类的唯一性,避免了多个实例可能带来的数据不一致问题。
Junit通过模块化测试来发现代码可能存在的问题,但是对于结构复杂的函数,Junit的断言机制常常需要人肉编译,会增加时间消耗(例如fight函数),因此在编写代码时,尽量将函数拆分成更小的模块,方便测试和维护。同时,Junit测试用例的编写也需要覆盖各种边界情况,以确保代码的健壮性。
通过OOpre课程的学习,我深刻理解了面向对象编程的核心思想和设计模式的应用。在实际编码过程中,学会了如何将复杂的问题拆解成多个类和模块,提高了代码的可维护信性。同时,通过Junit测试,增强了代码的稳定性。但是我也同样意识到了自己在设计模式应用上的熟练度较低的问题,需要在今后的学习中不断提升。
增加实战开发机会,让同学们将学到的知识应用到实际项目中,课上的学习很难做到完全掌握OO的精髓。通过实战项目,可以更好地理解面向对象设计的原则和模式,提高解决实际问题的能力。
👍