面向抽象编程

 

需求:把一个User类给添加到数据库中

对于此功能的不同实现方法:

最原始的方式:
 写一个User类,在User类的main方法里面首先new一个User;对象出来,
 之后把他给写入到数据库

第一次改进之后:
 写一个User类,一个Test类,在Test类中的main方法里面去new一个User
 并且把它存入到相应的数据库中.

第二次改进之后:
 写一个User类,一个Test类,一个UserService类,其中UserService类
 实现了对User类的所需要的操作,而Test类只需要直接的调用UserService
 类中的方法去实现它需要实现的功能即可.

第三次改进之后:
 写一个User类,一个Test类,一个UserService类,一个UserDAO类,User
 其中UserDAO的作用是提供对User存入数据库提供实现方法.
 
第四次改进之后:
 写一个User类,一个Test类,一个UserService类,一个UserDAO类,多个
 UserDAOImpls的实现类,这个时候UserDAO就修改为接口了,而UserDAOImpls
 才是真正的提供User数据与数据库打交道的那个类,这个时候呢灵活性就体
 现出来了,灵活性体现在UserService对于数据库的操作上面的灵活性,简单
 性.
 对于第三次的改进而言,只是有了对于数据库的操作的实现,但是如果换了数
 据库的话,就需要修改实现了,换句话就是需要重新的去修改UserDAO里面的代
 码了,可是如果把UserDAO写成接口的话,那就不一样了,因为是接口,所以可以
 生成多个接口的实现类,可以针对不同的数据库提供不同的实现,这个时候在
 使用的是接口来new一个实现类
 UserDAO userdao = new UserDAOmySqlImpl();
 
 而且在换了数
 据库实现之后并不用去修改具体的实现类的代码,而只是需要修改new的后半
 部分就可以了,比如这个时候需要使用Oracle数据库来实现了,这个时候就
 这样
 UserDAO userdao = new UserDAOOracleImpl();
 
 因为它们都实现了相同的接口,所以里面所拥有的方法都是一样的,这个时候
 其他的代码都不要修改了,只需要修改这一处的代码即可.
 
第五次改进之后:
 问题:大部分的情况下需要存入数据库的并不是单一的一个类,或者几个类,而
 是好多的类,这个时候怎么办呢?
 因为需要对这些DAO进行统一的管理,这个时候就不能只是用哪个然后去new哪个
 了还是有一些的麻烦,因此可以使用配置文件来读取自己需要new的类,这样就可
 以更加灵活的来控制程序了,根据配置文件中的配置参数去new出来各种不同的
 对象用来实现它们的功能.
 
第六次改进之后:
 这次的改进是对Service这个类进行抽象,把它给抽象为接口,然后对Service提
 供不同的实现,这个Service之所以要进行抽象在于对他的不同需求,比如有的
 Service类需要提供权限的检查,有的不需要,这个时候就有对灵活性的要求了,
 既然有了就可以根据具体的情况去处理这个请求,自然需要使用抽象来实现这个
 灵活性的需求了,比如在配置文件中配置好Service的需求,需要检查,那么在new
 的时候就可以根据读取到的具体的内容去new它们了.
 
第七次改进之后:
 这一次的改进是对类的一个实例化处理,就是根据xml的配置来读取具体的内容,
 根据内容生成具体的对象,就是BeanFactory.
 
 
到了第六次改进之后就差不多了,这个时候对于User的处理就只需要对外
提供UserService的接口就行了.基本上就满足了对灵活性的要求了.

其中UserDAO与UserService的区别在于,UserDAO只是负责User类与数据库
之间打交道,UserService虽然它里面也负责User跟数据库打交道,但是它
向外公开的是业务逻辑而UserDAO则是封装了具体的User类是怎么存入到
数据库中的,除此之外UserService还要负责其他的一些业务逻辑,比如对
用户权限的验证等等.

 这个也叫做面向抽象编程,它的灵活性得到了大大的提高.


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值