前面我们已经用Javabean写出了连接数据库,并进行增删改查的操作。但在一些细节方面,我们需要优化。
壹、为安全考虑
(1)、我们以往写的代码,如真正用到社会,那么他的安全性就会大大减退。因为我们的代码在增删改查上使用
UserDao userdao = new UserDao();
那么这种方法会使一些不法分子知道我们所用的方法后,进行一些不法操作,就好比你不必知道自来水管的水从何而来,你只管知道这个水龙头能出水,
能满足你的需求,就OK。那这就是我们接下来所用到的接口(interface)
(2)、Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,
因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
(3)、步骤
<1>、我们将原先的UserDao.java RENAME 为 UserDaoImpl.java。
public class UserDaoImpl implements UserDao{......}
<2>、在UserDaoImpl.java同阶的package中创建接口。命名为UserDao.java,
然后,把所需要的方法的“头部”写入。
package com.soft.dao;
import java.util.ArrayList;
import com.soft.bean.User;
/**
* 接口中只有方法的头部,没有方法体,相当于按图索骥,
* 这里的每一个方法头相当于图,而骥就是UserDaoImpl中的每一方法
* 接口的默认变量是public abstract,只包含全局常量和抽象方法
* 接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量
* @author 15239
*
*/
public interface UserDao {
//删除
boolean delete(String username);
//添加
boolean insert(String username,String password);
//查询
ArrayList<User> queryAll();
boolean login(String username,String password);
//更新
boolean update(String user,String password,String user1);
}
(4)、接口的设计模式--工厂模式
<1>、在与package为com.soft.dao的同阶创建package为com.soft.factory
<2>、在包中创建DaoFactory.java
<3>、package com.soft.factory;
import com.soft.dao.UserDao;
import com.soft.dao.UserDaoImpl;
public class DaoFactory {
/**
* 工场模式是将同一类的不同子类对象进行实例创建,使方法和方法体完全分开
* @return
*/
public static UserDao getUserDao() {
return new UserDaoImpl();
}
}
最后 以更新操作为例,
UserDao userDao =DaoFactory.getUserDao();
boolean t = userDao.update(user, password, user1);
第一个UserDao为类的名字,就是那个接口
第二个UserDao为 对象名
后面的是用DaoFactory类的getUserDao()的方法获得类UserDao的方法头部,在通过头部找到UserDaoImpl的方法体,最后实现功能。