【发布时间】:2021-11-13 17:40:03
【问题描述】:
我有一个设计问题,我无法找到好的解决方案。这是我的问题:
有两个不同的对象“树”需要一起处理。对象树一:
-
AbstractObjectTreeOne与Sub1ObjectTreeOne和Sub2ObjectTreeOne -
AbstractObjectTreeTwo与Sub1ObjectTreeTwo和Sub2ObjectTreeTwo
我现在有一个方法可以获取 AbstractObjectTreeOne 列表和 AbstractObjectTreeTwo 列表。它们的大小完全相同,并且按名称彼此“匹配”。所以我可以遍历 AbstractObjectTreeOne 列表中的对象并按名称获取相应的 AbstractObjectTreeTwo。
现在应该验证“匹配”对象(按名称)是否真的相互匹配,因此当前代码包含很多 instanceof 内容。示例:
if (!(objectOfAbstractObjectTreeOne instanceof Sub1ObjectTreeOne)) {
throw exception;
}
然后也用同样的方法
if (!(objectOfAbstractObjectTreeTwo instanceof Sub1ObjectTreeTwo)) {
throw exception;
}
之后,这两个参数都被转换为它们的“真实”子类型以进行进一步处理。这也感觉不是很好。
这一切都感觉不是很面向对象,但我目前不知道如何解决这个问题。我尝试了访问者模式,但它只解决了 AbstractObjectTreeOne 或 AbstractObjectTreeTwo 中的 instanceof 问题,并且仍然包含很多 instanceof。
也许你们中的一些人对这类问题有一个好主意。也许这很容易解决,但我还没有正确的想法。
【问题讨论】:
-
运营商是
instanceof,而不是instanceOf。
标签: java oop design-patterns