面向抽象(接口)编程的好处就是灵活性
例子:
对于一个User的JavaBean,对他进行保存。
其中有这几个包
cn.edu.hpu.model:存放实体类
cn.edu.hpu.Service:存放业务类
cn.edu.hpu.Dao:存放数据库连接类
如果要实现可以结合多个数据库的功能该怎么写比较灵活?用面向抽象的思想:
UserService:
UserDao:
其中一个Impl
UserDaoImpl:
例子:
对于一个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