日期:2014-05-20  浏览次数:20697 次

DAO设计模式的问题 请大家给我讲讲 谢谢
一般VO类是定义一个包含get和set方法的一些类也就是我们常说的bean 通常我们这样定义public class User{}
一般DAO接口是定义所有用户的操作 也就是定义一些方法 通常这样写public interface UserDao{}
DAO实现类实现了DAO接口的定义的所有方法 通常我们这样写public class UserDaoImpl implements UserDao{}
那我们定义工厂类的时候通常我们这样定义 public class DaoFactory{
public static UserDao getUserDaoinstance(){


  return new UserDaoImpl();
  }
}
我们定义一个函数的时候 修饰符 返回值类型 函数名(参数类型 形式参数 ) 那我们为什么用UserDao来做为返回类型 UserDao是一个接口啊 

后来通过工厂获得DAO的实现类实例是这样写的 UserDao userdao=DaoFactory. getUserDaoinstance() 这句语句中DaoFactory是类 调用静态方法还好理解 然后返回了new UserDaoImpl(); 那前半部分UserDao是接口 为什么可以写成
UserDao userdao 我们平时写不是都这样 Person p=new Person() Person都是类啊  
谢谢大家给初学者解答

------解决方案--------------------
这个正是Java多态的一个应用,父类(接口)的引用指向子类(实现类)的实例,这样一来,如果你还有其他的UserDao的实现的话,只需要把Factory中的返回值修改就行了,而不需要修改代码的其他地方

至于这个多态的应用,我建议LZ不用着急,以后慢慢就会理解了
------解决方案--------------------
使用dao层是为了复用。dao层通常定义为接口,然后子类实现它。因为父类可以指向任何子类,这样就不用每次都定义变量了。只需定义一个即可。
------解决方案--------------------
代码如下:
public interface UserDao(){}
public class DaoImpl_01 implements UserDao(){}
public class DaoImpl_02 implements UserDao(){}


public class DaoFactory(){
public static UserDao getUserDaoImpl(){
return new DaoImpl_01;
//return new DaoImpl_02;这样的话,实现是不是就可以随意的更换?面向接口编程
}
}

个人感觉你的代码量很少,最多也就是CRUD,多写写,写的多了就明白了。