현재 3D 환경에서 일련의 벡터를 표현해야하는 프로젝트를 진행 중입니다. 여러 가지 시각화 구현이 있습니다.enum을 구현 컨테이너로 사용하기
모든 시각화 유형을 열거 형으로 묶을 수 있다는 생각에 왔습니다. 인터페이스 VectorVisualization 및이 인터페이스를 구현하는 여러 구현을 정의했습니다.
는 지금은 인터페이스 클래스에 다음 열거를 추가했습니다 :public interface VectorVisualization {
public enum VectorVisualizationType {
CYLINDER(new VectorVisualizationCylinder(), "Cylinder"),
CONES(new VectorVisualizationCones(), "Cones"),
FATCONES(new VectorVisualizationFatCones(), "Fat cones"),
ARROWS(new VectorVisualizationArrows(), "Arrows");
private final String label;
private final VectorVisualization vis;
VectorVisualizationType(VectorVisualization vis, String label) {
this.vis = vis;
this.label = label;
}
public VectorVisualization getVisualization() {
return this.vis;
}
public String getLabel() {
return this.label;
}
}
void prepareVBO(GL gl, ArrayList<VectorData> vectors, VectorField field);
void render(GL gl);
void clearOldVBOS(GL gl);
}
라벨이 GUI에서 JComboBox를위한 것입니다. 이제 열거 형을 반복하고 다른 유형의 레이블을 얻을 수 있습니다. 또한 구현을 설정하려면 다음과 같은 열거 형을 사용할 수 있습니다.
VectorVisualizationType.CYLINDER.getVisualization()
좋은 방법입니까? 아니면 그 접근법에 문제가 있습니까? 물론 새로운 구현물을 만들었 으면 이것을 enum에 추가해야합니다.
의견을 보내 주셔서 감사합니다.
답변 해 주셔서 감사합니다. Thread-Safety의 좋은 점입니다. 그러나 우리의 경우에는 문제가되어서는 안됩니다. 유사한 기능을 제공하는 또 다른 방법은 enum을 키로 사용하고 VectorVisualization을 값으로 사용하는지도를 사용하는 것입니다. 하지만 새로운 구현체를 추가 할 때 enum과 함께 두 개의 코드 위치에서 정의해야합니다. 그래서 열거 형 사이드에 있습니다. :) – Prine
@Prine - 네, 과거에지도 기반 접근 방식을 여러 번 사용해 왔지만 enum으로 수행 한 작업에 비해 이점이 없습니다 (가능한 예외 : 런타임에 동적으로 맵에 새 항목을 추가 할 수 있고, 및/또는 기존 것들을 제거), 그래서 그것을 제기하지 않았다. 다음 번에 내가 필요로 할 때, 당신의 enum 기반 아이디어를 대신 사용해 볼 수 있습니다. – aroth