针对接口编程

本文可作为北京尚学堂 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();

面向接口 就是这个意思






你可能感兴趣的:(spring,oracle,编程,mysql,interface)