工厂模式之DAO

来源:互联网 发布:cms 编辑:程序博客网 时间:2024/04/20 03:10
  
在平时应用中,跟数据库打交道是很必然的,很多应用开发中都要对数据库进行操作,例如查询、更新、插入、删除等等,但在应用中我们如何做到提供一个非常好的接口,以便之后的维护呢?其实有很多种做法,现在我简单介绍一下得用DAO来对数据库的常用操作进行处理。
ManagerDAO,EngineerDAO,WorkerDAO extends UserDAO
由UserDAOFactory生产ManagerDAO,EngineerDAO,WorkerDAO
而UserDAOFactory又继承自DAOFactory
/*
*功能:此类利用配置文件来配置数据库的驱动以及用户名、密码等,
*使其功能更加完善,便于以后复用,可用于任何数据库的连接
*/
public Class DAOFactory
{
         private string configPath = ””;//配置文件的路径
         public Connection getConnection()
         {
                   读取配置文件,生成一个Connection;
         }
}
/*
*功能:此类继承自DAOFactory,然后可生成各应用中的DAO,使维护更加方便,
*若在之后的开发中,想更换数据库,则不用修改这个文件,只修改配置文件就OK了
*/
public class UserDAOFactory extends DAOFactory{
         public ManagerDAO getManagerDAO(){
                   ManagerDAO mdao = new ManagerDAO();
                   Connection conn = getConnection();
                   mdao.setConnection(conn);
}
 
public EngineerDAO getEngineerDAO(){
         EngineerDAO edao = new EngineerDAO();
         Connection conn = getConnection();
         edao.setConnection(conn);
}
 
public WorkerDAO get WorkerDAO (){
         WorkerDAO wdao = new WorkerDAO ();
         Connection conn = getConnection();
         wdao.setConnection(conn);
}
 
}
 
/*
*功能:为同一模块中的应用提取公共属性及方法,只提供数据常用操作的方法接口,
*同子类具体根据不同情况实现其功能
*/
 
Public class UserDAO{
         protected Connection conn;
         public void setConnection(Connection conn) {
                   db.setConn(conn);
                   this.conn = conn;
         }
         public void close(){
                   if (conn != null) {
                            try {
                                     conn.close();
                                     conn = null;
                            } catch (SQLException e) {
                                     e.printStackTrace();
                            }
                   }
         }
         public abstract User add(User user);
         public abstract User updateById(String userId);
         public abstract User queryById(String userId);
         public abstract Connection queryAllRecords();
         public abstract deleteById(String userId);
}
/*
*功能:此类继承自UserDAO,实现父类定义的抽象方法
*/
 
public class ManagerDAO extends UserDAO{
         public User add(User user){
                  在这里进行插入数据库表的操作
}
public User updateById(String userId){
         根据userId更新数据库表
}
public User queryById(String userId){
         根据userId搜索数据库表
}
public Collection queryAllRecords(){
         查询数据库表中的所有记录
}
public Boolean deleteById(String userId){
         根据userId删除数据库表记录
}
……
还有根据具体的需求写一些具体的操作方法
}
public class EngineerDAO extends UserDAO{
         public User add(User user){
                   在这里进行插入数据库表的操作
}
public User updateById(String userId){
         根据userId更新数据库表
}
public User queryById(String userId){
         根据userId搜索数据库表
}
public Collection queryAllRecords(){
         查询数据库表中的所有记录
}
public Boolean deleteById(String userId){
         根据userId删除数据库表记录
}
……
还有根据具体的需求写一些具体的操作方法
 
}
 
public class WorkerDAO extends UserDAO{
         public User add(User user){
                   在这里进行插入数据库表的操作
}
public User updateById(String userId){
         根据userId更新数据库表
}
public User queryById(String userId){
         根据userId搜索数据库表
}
public Collection queryAllRecords(){
         查询数据库表中的所有记录
}
public Boolean deleteById(String userId){
         根据userId删除数据库表记录
}
……
还有根据具体的需求写一些具体的操作方法
 
}
在这个模块中应还有如下几个类:User,Worker,Engineer,Manager,其中Worker,Engineer,Manager 继承自User,在User中定义那三个类的公共部分。
在本文中只简单的介绍了用户模块的简单设计,结合各自应用可以按照这种设计方式设计其他各个模块。其中应用中的各个模块的工厂DAO都继承自DAOFactory,这样所有数据库的配置都只受配置文件影响,若在应用中想更换数据库,则只需更换配置文件,不需要再修改程序,很好的利用了面向对象的思想。
cms cms
原创粉丝点击