Dao模式的抽象

问题描述

我正在做一些抽象的研究,但我没有找到我要找的东西。要么我看起来不对,要么我在寻找不可能的东西。

假设我有抽象类 Animal...

public abstract class Animal {
   private String name;
   private String owner;
}

现在,我可以让一些动物扩展 Animal。

public class Dog extends Animal {
   private string additionalAttribute;

   public Dog(String name,String owner,String additionalAttribute) {
     super(name,owner); 
     this.additionalAttribute = additionalAttribute;
   }

}

假设有更多的动物具有仅针对特定动物类型的附加属性,而超类 Animal 不知道这些属性

我想创建一个 DAO 来处理所有这些不同的动物。我认为为所有不同的动物创建 DAO 是低效的。所以我为抽象类 Animal 创建了一个 DAO。

public class AnimalDao {
   private Database db;

   public AnimalDao(Database db) {
      this.db = db;
   }

   public void create(Animal animal) {
      db.save(animal);
   }

   public Animal read(String id) {
     db.get(id);
   }
}

当我创建这个 dao 的一个实例并添加一个 Dog,然后尝试获取它时,我必须对我保存并想要获取的动物类型进行一些转换。但是当我得到可能是狗、猫或其他什么的动物后,那些额外的属性就不存在了。

在某种程度上,我明白为什么会这样。我的问题是,有没有办法创建一个 Dao,它可以保存我的超类的所有子类?还是我必须为每个子类创建一个 Dao?这将是非常愚蠢的,因为实现将完全相同。

有没有办法做到这一点?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...