एक्लिप्स मॉडलिंग फ्रेमवर्क का एक दिलचस्प विचार है जो विरासत पर भी विचार करता है। मूल अवधारणा को स्विच इंटरफ़ेस में परिभाषित किया गया है : स्विचिंग doSwitch विधि द्वारा किया जाता है ।
वास्तव में क्या दिलचस्प है कार्यान्वयन। प्रत्येक प्रकार के ब्याज के लिए, ए
public T caseXXXX(XXXX object);
विधि को लागू किया जाना चाहिए (एक डिफ़ॉल्ट कार्यान्वयन के साथ अशक्त)। DoSwitch कार्यान्वयन अल फोन करने का प्रयास करेंगे caseXXX अपने सभी प्रकार पदानुक्रम के लिए वस्तु पर तरीकों। की पंक्तियों में कुछ:
BaseType baseType = (BaseType)object;
T result = caseBaseType(eAttribute);
if (result == null) result = caseSuperType1(baseType);
if (result == null) result = caseSuperType2(baseType);
if (result == null) result = caseSuperType3(baseType);
if (result == null) result = caseSuperType4(baseType);
if (result == null) result = defaultCase(object);
return result;
वास्तविक रूपरेखा प्रत्येक वर्ग के लिए एक पूर्णांक आईडी का उपयोग करती है, इसलिए तर्क वास्तव में एक शुद्ध स्विच है:
public T doSwitch(Object object) {
return doSwitch(object.class(), eObject);
}
protected T doSwitch(Class clazz, Object object) {
return doSwitch(getClassifierID(clazz), object);
}
protected T doSwitch(int classifierID, Object theObject) {
switch (classifierID) {
case MyClasses.BASETYPE:
{
BaseType baseType = (BaseType)object;
...
return result;
}
case MyClasses.TYPE1:
{
...
}
...
आप एक बेहतर विचार प्राप्त करने के लिए ECoreSwitch के पूर्ण कार्यान्वयन को देख सकते हैं।