public abstract class BaseDAO { protected final DBUtil db = DBUtil.getDBUtil(); protected ResultSet rs; private static BaseDAO baseDAO; public BaseDAO() { init(); } private void init() { // buildAbilityDAO(); } // protected abstract void buildAbilityDAO(); public static synchronized BaseDAO getAbilityDAO(DAO dao) { switch (dao) { case AdminDAO: if (baseDAO == null || baseDAO.getClass() != AdminDAO.class) { baseDAO = AdminDAO.getInstance(); } break; case StudentDAO: if (baseDAO == null || baseDAO.getClass() != StudentDAO.class) { baseDAO = StudentDAO.getInstance(); } break; default: break; } return baseDAO; } protected void destroy() { try { if (rs != null) { rs.close(); } } catch (SQLException se) { se.printStackTrace(); } finally { db.close(); } } }
理解问题public abstract class BaseDAO { protected final DBUtil db = DBUtil.getDBUtil(); protected ResultSet rs; private static BaseDAO baseDAO; public BaseDAO() { init(); } private void init() { // buildAbilityDAO(); } // protected abstract void buildAbilityDAO(); public static synchronized BaseDAO getAbilityDAO(DAO dao) { switch (dao) { case AdminDAO: if (baseDAO == null || baseDAO.getClass() != AdminDAO.class) { baseDAO = AdminDAO.getInstance(); } break; case StudentDAO: if (baseDAO == null || baseDAO.getClass() != StudentDAO.class) { baseDAO = StudentDAO.getInstance(); } break; default: break; } return baseDAO; } protected void destroy() { try { if (rs != null) { rs.close(); } } catch (SQLException se) { se.printStackTrace(); } finally { db.close(); } } }
已完成理解「public abstract class BaseDAO { protected final DBUtil db = DBUtil.getDBUtil(); protected ResultSet rs; private static BaseDAO baseDAO; public BaseDAO() { init(); } private void init() { // buildAbilityDAO(); } // protected abstract void buildAbilityDAO(); public static synchronized BaseDAO getAbilityDAO(DAO dao) { switch (dao) { case AdminDAO: if (baseDAO == null || baseDAO.getClass() != AdminDAO.class) { baseDAO = AdminDAO.getInstance(); } break; case StudentDAO: if (baseDAO == null || baseDAO.getClass() != StudentDAO.class) { baseDAO = StudentDAO.getInstance(); } break; default: break; } return baseDAO; } protected void destroy() { try { if (rs != null) { rs.close(); } } catch (SQLException se) { se.printStackTrace(); } finally { db.close(); } } }」
展开阅读网页
抽象基类 BaseDAO 的设计和功能
BaseDAO
是一个抽象类,用于作为数据访问对象(DAO)的基类。它提供了数据库连接和结果集的基本操作,以及单例模式的实现来获取具体的DAO实例。
基类设计
- 抽象类:
BaseDAO
被abstract
关键字修饰,意味着它不能被直接实例化,它作为其他DAO类的基类4。 - 成员变量:
构造函数和初始化
- 构造函数
public BaseDAO()
调用私有的init()
方法进行初始化。 private void init()
:用于初始化操作,例如构建DAO实例,但当前实现为空。
单例模式实现
public static synchronized BaseDAO getAbilityDAO(DAO dao)
:根据传入的dao
类型,返回对应的BaseDAO
单例实例。使用synchronized
确保线程安全6。
资源销毁
protected void destroy()
:关闭结果集和数据库连接,释放资源。
访问控制
应用场景
BaseDAO
类作为学生信息管理系统中DAO模式的一部分,可以应用于学校、培训机构、教育机构等,实现学生信息的增删改查操作510。