【发布时间】:2015-10-16 02:47:21
【问题描述】:
我有一个返回多态对象的低级(即不能依赖更高级别的模块)MySQL DAO 包
abstract class MySQLAnimal {
int a;
}
class MySQLCat extends MySQLAnimal {
int b;
}
Collection<MySQLAnimal> retrieveAllMySQLAnimals(...) {...}
然后,我有这个包的消费者,它提供抽象(即它不知道如何检索它们)并包含具有镜像类层次结构的类:
abstract class Animal {
int a;
}
class Cat extends Animal {
int b;
}
Collection<Animal> retrieveAllAnimals(...) {...}
我正在尝试在这个消费者包中编写一个适配器,它需要使用 MySQL DAO 检索 MySQLCat 对象并以抽象类的形式返回它(即实现 retrieveAllAnimals(...) 方法)。什么是最干净的方式(阅读:无需致电instanceof)来做到这一点?
【问题讨论】:
-
也许您可以简单地将抽象方法
Animal toAnimal()添加到MySQLAnimal?所有子类都将实现此方法,该方法将转换为适当的Animal层次结构对象。 -
在这种情况下通常推荐使用Visitor 模式。
-
我感觉很奇怪,你需要一个完整的类层次结构来处理持久性问题。
标签: java oop design-patterns