1.StudenDaoListImpl.java与StudentDaoArrayImpl.java有何不同?
前者用ArrayList,后者用普通数组;前者无需指定初始容量,后者需在创建对象时传入数组大小;前者支持动态扩容,后者容量固定,数组满后无法继续添加;前者直接调用add方法即可添加,后者需遍历数组找到null才能添加
2.StudentDao.java文件是干什么用的?为什么里面什么实现代码都没有?
作用:作为DAO 接口,定义学生数据操作的标准协议,统一所有实现类的方法名称、参数及返回值,让上层代码无需关注底层存储细节,只需面向接口编程
无实现代码的原因:接口的本质是方法规范,仅定义要做什么,不定义怎么做
3.使用搜索引擎搜索“Java DAO”,选出几句你能看懂的、对你最有启发的话。请结合接口知识去理解。
(1)“DAO 模式将数据访问逻辑与业务逻辑分离,通过接口隔离底层数据存储的变化”
理解:接口(如 StudentDao)是 “中间层”,业务逻辑(Test 类)只调用接口方法,若底层存储从数组换成列表(或数据库、文件),只需更换实现类,无需修改业务代码,符合 “开闭原则”(对扩展开放,对修改关闭)
(2):“DAO 接口定义数据操作的统一方法,实现类负责与具体存储介质交互,上层代码面向接口而非具体实现”
4.尝试运行Test.java。根据注释修改相应代码。结合参考代码回答使用DAO模式有什么好处?
理解:接口强制所有实现类遵循相同方法规范,避免因实现类方法不一致导致上层代码混乱;同时上层代码(如Test类)中StudentDao sdm的定义,体现 “多态” 特性,同一接口引用可指向不同实现类对象
灵活性:切换底层存储方式(数组→列表)时,只需修改StudentDao的初始化代码(如new StudentDaoArrayImpl(50)→new StudenDaoListImpl()),其余代码不变
规范性:接口强制实现类统一方法,避免不同存储方式的实现类方法混乱(如添加学生统一叫addStudent,而非有的叫add、有的叫insert)
可维护性:若需修改数据访问逻辑(如查询学生时忽略大小写),只需修改对应实现类的getStuByName方法,无需改动所有关联代码