看到一个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。
请问这样的实现方式是个什么原理,有什么好处与坏处?
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。
请问这样的实现方式是个什么原理,有什么好处与坏处?
如 BaseDAO() 实现增删改查, 那继承它的其它DAO实现类,就可以直接使用它的增删改查
即将所有 增删改查的基本操作全部放在一个BaseDAO里。如果不用继承,那你有可能每个DAO实现类都写增删改查,那样重复代码就会有很多了~
动物 - 猴子,大鸟,兔子。
就用abstract class Animal,其它动物继承它。 可以使用抽象类中的属性。 一般是对对象的继承。2、接口
飞, 爬树。
interface Fly, 或 interface Climb, 哪个动物会飞,就实现这个接口,一般是对 动作的实现。个人见解:两种实现的差不多-- 区别在以上所说2点。 欢迎拍砖。
BaseDao
public void save(){
session.save(getEntity());
}
abstact Object getEntity();大概就是上面的意思
service也是类似,可能有些操作是因为具体业务而增加的特殊操作,就写在service里,然后其他具体的service再去继承这个service
比如你的UserOneDAO和UserTwoDAO,增删改的方法都一样,只有查询不同,一个通过姓名,一个通过ID。
那就可以写一个BaseDAO抽象类实现增删改方法,然后写一个查询的抽象方法,子类继承BaseDAO之后只要写一个查询方法就可以了。