在Java中管理具有几乎相同属性的2个类的最佳方法

时间:2013-04-22 18:59:57

标签: java oop

我想首先说明,由于超出此问题范围的原因,无法修改数据库。

话虽如此,问题是我有2个数据库对象(T1,T2)具有几乎相同的属性,并且它们共享相同的UI代码和业务逻辑。含义取决于配置选项,UI显示T1数据或T2数据。管理数据的所有逻辑都是一样的。

我不想要的是让我的应用程序逻辑代码充满instanceof运算符,并基本上管理两组相同的代码。所以我的解决方案是创建一种包装类(TCombo),它将T1或T2作为构造函数。所有的getter和setter都具有类似于

的设计
public String getProp1() {
    if(o instanceof T1) ((T1)o).getProp1();
    else(o instanceof T2) ((T2)o).getProp1();
}

并且基本上对于setter也是如此,所以当我设置一个值时,DB对象被正确设置。这样做可以让我使用一组代码,并在整个代码中管理这个TCombo类,这非常有用。问题是效率很糟糕,因为我的应用程序处理大型数据集,不得不为数据集中的每个项目创建这个TCombo类,这会产生可怕的加载时间。

我的问题是:管理这些类的最佳方法是什么,所以我不需要维护两组逻辑代码并且还有速度?

2 个答案:

答案 0 :(得分:6)

这或多或少是设计用于处理的接口,因此您使用常见的getter和setter设置一个名为T的接口,然后同时拥有T1和{{1}实现它。两个共同的代码可以传递对接口的引用,并调用常用方法而不必使用对T2的调用。这将允许您潜在地在各个实例的getter和setter中实现自定义代码(例如,如果您想要instanceof set T1方法进行验证,而不是T2,等)

另一个选项是拥有一个公共基类,两个数据库对象都可以扩展,这个基础对象包含它们之间的所有公共字段。然后你只需传递对基类的引用。这样做的好处是无需在同一个地方实现相同的getter和setter。

在任何一种情况下,您都需要使用instanceof并进行投射以获取对T1T2特有的方法的访问权限,但您应该能够更少地执行此操作

答案 1 :(得分:4)

你应该看看接口,你可以创建一个让T1和T2实现接口的接口。那么你只需要制作一个T1或T2实例,你的代码就可以了。您还可以查看liskov子句原则。

相关问题