मैं वर्तमान में एक परियोजना है, जहां हम एक 3 डी वातावरण में वैक्टर का एक सेट का प्रतिनिधित्व करने के लिए है पर काम कर रहा हूँ की एक कंटेनर के रूप में उपयोग करते हुए enums। हमारे पास कई अलग-अलग विज़ुअलाइजेशन कार्यान्वयन हैं।कार्यान्वयन
मैं विचार के लिए आया था, कि मैं एक enum में सभी दृश्य प्रकार बंडल सकता है। मैंने इंटरफ़ेस वेक्टर विज़ुअलाइजेशन और इस इंटरफ़ेस को लागू करने वाले कई कार्यान्वयन को परिभाषित किया है।
अब मैं इंटरफ़ेस वर्ग में शामिल किया है निम्नलिखित enum:
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);
}
लेबल गुई में एक JComboBox के लिए है। तो अब मैं enum पर बस फिर से शुरू कर सकते हैं और विभिन्न प्रकार के लेबल प्राप्त कर सकते हैं। एक कार्यान्वयन सेट करने के लिए मैं इस तरह के enum का उपयोग कर सकते हैं:
VectorVisualizationType.CYLINDER.getVisualization()
लेकिन क्या यह एक अच्छा तरीका है? या क्या उस दृष्टिकोण के साथ कोई समस्या है? बेशक, अब जब आपने एक नया कार्यान्वयन बनाया है तो आपको इसे enum में जोड़ना होगा।
आपकी राय के लिए धन्यवाद!
आपके उत्तर के लिए धन्यवाद! थ्रेड-सेफ्टी के साथ यह एक अच्छा मुद्दा है। लेकिन हमारे मामले में यह एक समस्या नहीं होनी चाहिए। समान कार्यक्षमता प्रदान करने का एक और तरीका एक मानचित्र का उपयोग करेगा जहां आप एक कुंजी के रूप में enum का उपयोग करेंगे और वेक्टर विज़ुअलाइजेशन को मान के रूप में उपयोग करेंगे। लेकिन जब एक नया कार्यान्वयन जोड़ते हैं तो आपको enum के साथ एक के बजाय दो कोड स्थानों पर परिभाषित करना होगा .. तो मैं अभी भी enum पक्ष पर हूँ :)। – Prine
@Prine - हां, मैंने अतीत में कई बार मानचित्र-आधारित दृष्टिकोण का उपयोग किया है, लेकिन यह enum के साथ किए गए कार्यों पर कोई लाभ नहीं देता है (संभव अपवाद: आप रनटाइम पर गतिशील रूप से मानचित्र में नई प्रविष्टियां जोड़ सकते हैं, और/या मौजूदा लोगों को हटा दें), इसलिए मैंने इसे नहीं लाया। अगली बार जब मुझे इसकी ज़रूरत है, तो मैं इसके बजाय आपके enum- आधारित विचार का प्रयास कर सकता हूं। – aroth