看到一个ssh项目,是采用抽象的编程模式,而不是借口的编程,谁能给讲讲这是什么原理,有什么好处和不好之处:
DAO层inteferface  DAO(){
增删改查的操做方法;
}
DAO的实现层实现hibernateDAOsupport,
然后定义了一个抽象类,
abstract class BaseDAO(){
里面注入接口DAO..., 就没有其他代码了
}
然后其他各个DAO的实现去继承这个BaseDAO(),比如
public class UserDAO extends BaseDAO(){
...}
Service层有一个BaseService
public class BaseService extends BaseDAO(){
} 然后用户的各个Service去继承这个BaseService。
请问这样的实现方式是个什么原理,有什么好处与坏处?

解决方案 »

  1.   

    做了轻度封装
    如 BaseDAO() 实现增删改查, 那继承它的其它DAO实现类,就可以直接使用它的增删改查
    即将所有 增删改查的基本操作全部放在一个BaseDAO里。如果不用继承,那你有可能每个DAO实现类都写增删改查,那样重复代码就会有很多了~
      

  2.   

    1、抽象类
       动物  - 猴子,大鸟,兔子。
       就用abstract class Animal,其它动物继承它。 可以使用抽象类中的属性。  一般是对对象的继承。2、接口
       飞, 爬树。
       interface Fly, 或 interface Climb,  哪个动物会飞,就实现这个接口,一般是对 动作的实现。个人见解:两种实现的差不多-- 区别在以上所说2点。   欢迎拍砖。
      

  3.   

    因为dao和service里面有很多重复的代码,如果用接口的话还要去重复的写那些代码。为了实现代码的重用,所有高手们有的时候就会用抽象类了,这样可以把重用的构造方法或者其他的方法写在一个类里面就行了。
      

  4.   

    BaseDao可能会有一些公共的方法,这个方法的具体实现是统一的,所以要用抽象类。比如BaseDao做一个存储操作
    BaseDao
    public void save(){
       session.save(getEntity());
    }
    abstact Object getEntity();大概就是上面的意思
    service也是类似,可能有些操作是因为具体业务而增加的特殊操作,就写在service里,然后其他具体的service再去继承这个service
      

  5.   

    抽象类的好处是可以继承父类的方法,节省代码。
    比如你的UserOneDAO和UserTwoDAO,增删改的方法都一样,只有查询不同,一个通过姓名,一个通过ID。
    那就可以写一个BaseDAO抽象类实现增删改方法,然后写一个查询的抽象方法,子类继承BaseDAO之后只要写一个查询方法就可以了。