【发布时间】:2024-04-18 01:10:01
【问题描述】:
我目前正在研究一个计算两个对象之间差异的类。我正在尝试确定该课程的最佳设计是什么。我看到两个选项:
1) 一次性类实例。在构造函数中获取要 diff 的对象并为此计算 diff。
public class MyObjDiffer {
public MyObjDiffer(MyObj o1, MyObj o2) {
// Calculate diff here and store results in member variables
}
public boolean areObjectsDifferent() {
// ...
}
public Vector getOnlyInObj1() {
// ...
}
public Vector getOnlyInObj2() {
// ...
}
// ...
}
2) 可重用的类实例。构造函数不接受任何参数。有一个“calculateDiff()”方法,可以对对象进行比较,并返回结果。
public class MyObjDiffer {
public MyObjDiffer() { }
public DiffResults getResults(MyObj o1, MyObj o2) {
// calculate and return the results. Nothing is stored in this class's members.
}
}
public class DiffResults {
public boolean areObjectsDifferent() {
// ...
}
public Vector getOnlyInObj1() {
// ...
}
public Vector getOnlyInObj2() {
// ...
}
}
差异将相当复杂(细节对问题无关紧要),因此需要一些辅助函数。如果我采用解决方案 1,那么我可以将数据存储在成员变量中,而不必传递所有内容。它稍微紧凑一些,因为所有内容都在一个类中处理。
但是,从概念上讲,“不同”特定于一组结果似乎很奇怪。选项 2 将结果与实际计算它们的逻辑分开。
编辑:选项 2 还提供了使“MyObjDiffer”类静态的能力。谢谢kitsune,我忘了说。
我无法看到任何一个选项的任何重要优点或缺点。我认为这种事情(一个只处理一些一次性计算的类)必须经常出现,也许我错过了一些东西。所以,我想我会向云端提出这个问题。这里的一个或另一个选项有显着的优点或缺点吗?天生就更好吗?有关系吗?
我在 Java 中执行此操作,因此可能存在一些限制,但总体设计问题可能与语言无关。
【问题讨论】:
标签: language-agnostic oop