공간 데이터 구조를 작성 중이며 최상의 NODE 구현이 무엇인지 의심 스럽습니다. 내 디자인에 따르면 나는 추상 노드 엔티티와 그것을 상속하는 세 가지 클래스를 가지고있다 : EMPTYNODE, FULLNODE, INTERNALNODE.개념 상속 구현
첫 번째 데이터에는 특별한 데이터가 없습니다.
두 번째 요소에는 일반 요소에 대한 참조가 1 개 있습니다.
세 번째 노드에는 다른 노드에 대한 참조가 두 개 있습니다.
나는 (내가 이미 코딩 한)이 상황을 구현하는 몇 가지 방법을 찾았지만 무엇이 최선인지 결정할 수는 없다.
이private static class Node {
private Elem elem = null;
private Node left = null, right = null;
public Elem getElem() {
assert isFull();
return elem;
}
public boolean isEmpty() {
return elem == null && left == null;
}
public boolean isFull() {
return elem != null;
}
public boolean isInternal() {
return elem == null && left != null;
}
}
두 번째 솔루션은 클래스 곳에 모든 클래스 제공하여 명시 적 분열을 작성하는 것입니다 : 내가 찾은
첫 번째 솔루션은 잠재적으로 이러한 방법으로 모든 작업을 수행하는 하나의 클래스 노드를 사용하는 것입니다 그것의 방법 만. 분명히 이런 식으로 우리는 노드 객체에 대해 여러 캐스트를 수행해야 할 의무가 있습니다.
private static abstract class Node {
public abstract boolean isEmpty();
public abstract boolean isFull();
public abstract boolean isInternal();
}
private static class FullNode extends Node{
private ITriangle elem;
@Override
public boolean isEmpty() {
return false;
}
@Override
public final boolean isFull() {
return true;
}
@Override
public final boolean isInternal() {
return false;
}
public Elem getElem() {
return elem;
}
}
세 번째 솔루션은 모든 클래스가 모든 방법을 제공 할 수 있도록 상속을 사용하는 것입니다,하지만 개체 유형해야한다 "IsEmpty 함수()"와 유사한 방법으로 수표. 잘못된 호출의 경우 우리는 예외를 throw합니다.
private static abstract class Node {
public abstract boolean isEmpty();
public abstract boolean isFull();
public abstract boolean isInternal();
public abstract Elem getElem();
}
private static class Empty extends Node{
@Override
public boolean isEmpty() {
return true;
}
@Override
public final boolean isFull() {
return false;
}
@Override
public final boolean isInternal() {
return false;
}
@Override
public Elem getElem() {
throw new AssertionError();
}
}
이러한 세 가지 해결책에 대해 어떻게 생각하십니까?
어느 것을 사용 하시겠습니까?
어떤 아이디어라도 감사하겠습니다.
내 경우에는 변경해야하며 실제로 옵션 1은 세 가지 중에서 가장 효율적입니다 (시간과 공간 모두에서). 도움 주셔서 감사합니다. – TheSENDER
저는 이론적 인 관점에서이 문제에 대해 생각하고 있습니다. 상태 패턴 사용은 어떻게됩니까? – TheSENDER
네, 그게 내가 바꿀 수있는 노드에 대한 제 의견에서 표현하려고했던 것입니다. enum을 사용하여 상태 패턴을 구현하는 예제를 추가했습니다. 허용 할 변경 내용을 잘 모르는 상태에서 값을 변경하고 상태를 변경하는 비트가 없습니다. – BenM