控制反转思想
建立如下的包
思想就是service控制dao层test假象为用户控制,按照通常的写法在service层
new UserDaoImpl().getUser();
用户再去调用service层即可,但是问题出现了,如果我们想要调用dao层的另一个接口实现类,UserDaoMySqlImpl,这时我们就需要讲UserServiceImp类中的方法改写为、
new UserDaoMySqlImpl().getUser();
这样更改Service层十分的不方便并且操作起来很麻烦,需要改代码。
我们可以通过暴露接口给用户,让用户选择想要得到的结果传入不同的参数。这一思想叫做控制反转。
service层代码
实现类
public void getUser() {
new UserDaoMySqlImpl();
new UserDaoImpl().getUser();
userDao.getUser();
}
public void getUser(UserDaoImpl chuanguolaide) {
chuanguolaide.getUser();
}
public void getUser(UserDaoMySqlImpl chuanguolaide) {
chuanguolaide.getUser();
}
接口
public interface UserService {
public void getUser();
}
UserDaoImpl层代码
接口
public interface UserDao {
public void getUser();
}
实现类
public void getUser() {
System.out.println("获取用户数据");
}
测试类
public static void main(String[] args) {
UserServiceImp userService = new UserServiceImp();
userService.getUser(new UserDaoImpl());
userService.getUser(new UserDaoMySqlImpl());
// userService.setUserDaoMySql(new UserDaoMySqlImpl());
}