यहाँ पर क्यों
class DOSClient {
OrderParser orderParser;
string orderCode;
DOSClient(OrderParser orderParser, string ordercode) {
this.orderParser = orderParser;
this.ordercode = ordercode;
}
void DisplayOrderCode() {
Console.Write( "Prefix: " + orderParser.GetStringPart(ordercode) );
...
}
}
class GUIClient {
OrderParser orderParser;
string orderCode;
GUI gui;
GUIClient(OrderParser orderParser, string ordercode, GUI gui) {
this.orderParser = orderParser;
this.ordercode = ordercode;
this.gui = gui;
}
void DisplayOrderCode() {
gui.Prefix( orderParser.GetStringPart(ordercode) );
...
}
}
class OrderParserUS : IOrderParser {
public string GetStringPart(string input)
{
//Some input validation which is removed for clarity
if(input.Length > 5)
return input.Substring(0,1);
if(input.Substring(0,1) == "B")
return input.Substring(0,3);
return string.empty;
}
}
class OrderParserEU : IOrderParser {
public string GetStringPart(string input)
{
//Some input validation which is removed for clarity
if(input.Length > 6)
return input.Substring(0,1);
if(input.Substring(0,1) == "#")
return input.Substring(0,3);
return string.empty;
}
}
यदि आप एक स्थिर पद्धति के साथ गए थे, GetStringPart
तो पुराने व्यवहार को नष्ट किए बिना या सशर्त तर्क के साथ इसे प्रदूषित किए बिना व्यवहार को बदलने का कोई तरीका नहीं होगा । यह सच है कि स्टेटिक्स भेस में बुरी ग्लोबल्स हैं, लेकिन यह तथ्य कि वे बहुरूपता को निष्क्रिय करते हैं, उनके बारे में मेरी मुख्य शिकायत है। OOP भाषाओं में स्टेटिक तरीके प्रथम श्रेणी के नहीं हैं। इस पद्धति को रहने के लिए एक वस्तु देकर, यहां तक कि बिना किसी राज्य के, हम विधि को पोर्टेबल बनाते हैं। इसके व्यवहार को एक चर के मान की तरह पास किया जा सकता है।
यहां मैंने एक ऐसी प्रणाली की कल्पना की है जिसे यूरोप में तैनात होने पर थोड़ा अलग तरीके से व्यवहार करने की आवश्यकता होती है, जब अमेरिका में तैनात किया जाता है। इसके बजाय, या तो सिस्टम को केवल कोड की आवश्यकता होती है, जिसे हम दूसरे द्वारा आवश्यक व्यवहार को नियंत्रित करके नियंत्रित कर सकते हैं कि पार्सिंग ऑब्जेक्ट को किस क्रम में ग्राहकों में इंजेक्ट किया जाता है। यह हमें क्षेत्र विस्तार के प्रसार को समाहित करने की अनुमति देता है। यह मौजूदा पार्सर को छूने के बिना ऑर्डरपर्सकानाडा को जोड़ना आसान बनाता है।
यदि आपके लिए इसका मतलब कुछ भी नहीं है, तो वास्तव में इसके लिए एक अच्छा तर्क नहीं है।
BTW, GetStringPart
एक भयानक नाम है।