针对接口编程

时间:2022-01-14 21:34:42

本文可作为北京尚学堂 spring课程的学习笔记


为什么要针对接口编程?

不说理论了 直接上一个实例

给数据库里写一个user 很简单的例子

首先

package com.bjsxt.model;

public class User {
private String name;
private String password;
//省略get,set方法

}
然后我们加一个service 就是业务逻辑曾 包含user应该具有的一些逻辑 例如save delete...
package com.bjsxt.services;

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);
}
}
这个userdao是个什么东西?

userservice 主要干的是业务逻辑的事 但是更为具体的业务实现(与数据库相关的)由dao组成

userdao 主要干的是很数据库打交道的事 

package com.bjsxt.dao;

import com.bjsxt.model.User;

public class UserDao {

 public void save(User u) {
// TODO Auto-generated method stub
System.out.println("已经写入mysql");
}
}
问题来了 如果我们本来用的是mysql 现在想换成oracle

把上面的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();

面向接口 就是这个意思