यदि हर उत्तर को एक स्ट्रिंग के रूप में एन्कोड किया जा सकता है, तो आप ऐसा कर सकते हैं:
interface Question {
int score(String answer);
void display(String answer);
void displayGraded(String answer);
}
जहां खाली स्ट्रिंग एक प्रश्न है, जिसका कोई उत्तर अभी तक नहीं है। यह सवाल, जवाब और जीयूआई को अलग करने की अनुमति देता है फिर भी बहुरूपता के लिए अनुमति देता है।
class MultipleChoice implements Question {
MultipleChoiceView mcv;
String question;
String answerKey;
String[] choices;
MultipleChoice(
MultipleChoiceView mcv,
String question,
String answerKey,
String... choices
) {
this.mcv = mcv;
this.question = question;
this.answerKey = answerKey;
this.choices = choices;
}
int score(String answer) {
return answer.equals(answerKey); //Or whatever scoring logic
}
void display(String answer) {
mcv.display(question, choices, answer);
}
void displayGraded(String answer) {
mcv.displayGraded(
question,
answerKey,
choices,
answer,
score(answer)
);
}
}
टेक्स्ट बॉक्स, मिलान और इसी तरह के डिजाइन हो सकते हैं, सभी प्रश्न इंटरफ़ेस को लागू कर रहे हैं। उत्तर स्ट्रिंग का निर्माण दृश्य में होता है। उत्तर स्ट्रिंग परीक्षण की स्थिति का प्रतिनिधित्व करती है। छात्र आगे बढ़ने पर उन्हें संग्रहित किया जाना चाहिए। उन्हें प्रश्नों पर लागू करने से परीक्षण प्रदर्शित करने की अनुमति मिलती है और यह ग्रेडेड और नॉन ग्रेडेड दोनों तरह से होता है।
आउटपुट को अलग करके display()
और displayGraded()
दृश्य को स्वैप करने की आवश्यकता नहीं है और मापदंडों पर कोई ब्रांचिंग करने की आवश्यकता नहीं है। हालाँकि, प्रत्येक दृश्य प्रदर्शित करने के लिए उतने ही तर्क का पुन: उपयोग करने के लिए स्वतंत्र है जितना कि प्रदर्शित करते समय। इस कोड में लीक करने की जरूरत नहीं है जो कुछ भी करने के लिए तैयार है।
यदि, हालांकि, आप एक और अधिक गतिशील नियंत्रण चाहते हैं कि कैसे एक प्रश्न प्रदर्शित किया जाए तो आप यह कर सकते हैं:
interface Question {
int score(String answer);
void display(MultipleChoiceView mcv, String answer);
}
और इस
class MultipleChoice implements Question {
String question;
String answerKey;
String[] choices;
MultipleChoice(
String question,
String answerKey,
String... choices
) {
this.question = question;
this.answerKey = answerKey;
this.choices = choices;
}
int score(String answer) {
return answer.equals(answerKey); //Or whatever scoring logic
}
void display(MultipleChoiceView mcv, String answer) {
mcv.display(
question,
answerKey,
choices,
answer,
score(answer)
);
}
}
इसका दोष यह है कि इसके लिए ऐसे विचारों की आवश्यकता होती है, जो उनकी आवश्यकता नहीं होने पर उन पर निर्भर होने score()
या answerKey
उन पर निर्भर होने का प्रदर्शन नहीं करते हैं। लेकिन इसका मतलब है कि आपको प्रत्येक प्रकार के देखने के लिए परीक्षण प्रश्नों का पुनर्निर्माण नहीं करना है।