本文可作为北京尚学堂 spring课程的学习笔记
为什么要针对接口编程?
不说理论了 直接上一个实例
给数据库里写一个user 很简单的例子
首先
package com.bjsxt.model;然后我们加一个service 就是业务逻辑曾 包含user应该具有的一些逻辑 例如save delete...
public class User {
private String name;
private String password;
//省略get,set方法
}
package com.bjsxt.services;这个userdao是个什么东西?
import com.bjsxt.dao.UserDao;
import com.bjsxt.model.User;
public class UserService {
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void Save(User u){
userDao.save(u);
}
}
userservice 主要干的是业务逻辑的事 但是更为具体的业务实现(与数据库相关的)由dao组成
userdao 主要干的是很数据库打交道的事
package com.bjsxt.dao;问题来了 如果我们本来用的是mysql 现在想换成oracle
import com.bjsxt.model.User;
public class UserDao {
public void save(User u) {
// TODO Auto-generated method stub
System.out.println("已经写入mysql");
}
}
把上面的UserDao改成userdaomysql
再加上一个userdaooracle
当然给上面再加要给userdao的接口
如下:
package com.bjsxt.dao;
import com.bjsxt.model.User;
public class UserDaoMysql implements UserDao {
@Override
public void save(User u) {
// TODO Auto-generated method stub
System.out.println("已经写入mysql");
}
}
package com.bjsxt.dao;import com.bjsxt.model.User;public interface UserDao {public void save(User u);}那最后的test测试函数就很好写了
package com.bjsxt.test;
import com.bjsxt.dao.UserDaoMysql;
import com.bjsxt.model.User;
import com.bjsxt.services.UserService;
public class Test {
public static void main(String[] args) {
User user=new User();
UserService userService=new UserService();
UserDao dao=new UserDaoMysql();
userService.setUserDao(dao);
userService.Save(user);
}
}
如果要换成oracle 怎么办 改成如下
UserDao dao=new UserDaoOracle();
面向接口 就是这个意思