我需要2个对象:max heap和min heap。 两个对象都是相同的,但有些像swap或bubbleUp这样的方法以不同的方式比较对象。只比较线条是不同的:
while (curr > 0 && (heap[parent].compareTo(heap[curr]) < 0)) {
创建具有布尔值的Heap类是否更好?存储信息是最大还是最小堆?或者最好为min和max堆创建具有自己方法的子类?
public abstract class Heap {
private int[] values = new int[];
public void SomeHeapMethod()
{
if(values[0].compareTo(values[1]) > 0 ) //this would be diffent for max and min heap
}
}
答案 0 :(得分:2)
使用自己的方法创建两个类。如果你正在创建一个类,它可以作为两个不同的类,你违反了着名的清洁代码书的原则之一。
在面向对象的编程中,单一责任原则规定每个班级应该只有一个责任,而责任应该由班级完全封装。它的所有服务应该与这一责任密切相关......
另一个观点是可读性,如果另一个程序员要查看你的代码,那么比较两个多态或两个类解决方案更难以发现一个类有两种功能状态。
以下是我将如何使用多态解决方案。继承共享功能并在每个类中定义自定义功能的地方。
public abstract class Heap {
private Integer[] values;
public int compare(int i , int j)
{
throw new RuntimeException("Not implemented");
}
public void SomeHeapMethod()
{
if(this.compare(values[0], values[1]) > 0)
return;
}
}
class MinHeap extends Heap
{
public int compare(int i , int j)
{
return i + j % 2;
}
}
class MaxHeap extends Heap
{
public int compare(int i , int j)
{
return i + j % 1;
}
}
答案 1 :(得分:0)
如果你可以把比较函数作为参数,会更容易。作为参考,您可以查看Help with understanding a function object or functor in Java,其中讨论了如何处理所述函数。