【spring框架】什么是面向抽象(接口)编程

面向抽象(接口)编程的好处就是灵活性


例子:
对于一个User的JavaBean,对他进行保存。
其中有这几个包
cn.edu.hpu.model:存放实体类
cn.edu.hpu.Service:存放业务类
cn.edu.hpu.Dao:存放数据库连接类


如果要实现可以结合多个数据库的功能该怎么写比较灵活?用面向抽象的思想:
UserService:
package cn.edu.hpu.service;


import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.dao.UserDaoImpl;
import cn.edu.hpu.model.User;


public class UserService {
//Service完成的和Dao功能类似,为什么还要Service层呢?
//原因是Service这个层次完成功能除了把数据存储到数据库之外呢
//还可以完成“认证”等一些必要的业务功能,UserService对外
//公开的只是业务逻辑,而UserDao单纯的负责和数据库打交道
	private UserDao userDao= new UserDaoImpl();
	
	public UserDao getUserDao() {
		return userDao;
	}


	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}


	public void add(User u){
		this.userDao.save(u);
	}
}


UserDao:
package cn.edu.hpu.dao;


import cn.edu.hpu.model.User;


public interface UserDao {
	//将Dao设置为接口,然后写Dao的Impl(实现)
	//这样可以多写几个Impl,就可以实现多数据库的连接
	//MySQLDaoImpl、SqlServerDaoImpl
	//这就叫做面向抽象编程(原来是死的,没有灵活性)
	public void save(User u);
}

其中一个Impl
UserDaoImpl:
package cn.edu.hpu.dao;


import cn.edu.hpu.model.User;


public class UserDaoImpl implements UserDao{


	public void save(User u) {
		//可以写任意的数据库连接代码
		
	}


}



用大白话来说,你们家要想装修,墙要用壁纸,你要说用死了,我要用强生的壁纸,那你永远只能用强生的了,你要说我用符合国家某种规格的壁纸,那么你想换谁家的都可以。所以这就是灵活性。


转载请注明出处:http://blog.csdn.net/acmman

你可能感兴趣的:(spring,框架,数据库,面向接口编程,面向抽象编程)