के साथ युग्मन से बचने के लिए मैं किसी विशेष परिस्थिति में रणनीति पैटर्न को लागू करने का प्रयास कर रहा हूं, लेकिन इस बात के बारे में कोई समस्या है कि इसके लिए डेटा प्रदान करने वाले संदर्भ वस्तु के लिए प्रत्येक ठोस रणनीति को जोड़ना कैसे बचें। निम्नलिखित एक पैटर्न का सरलीकृत मामला है जो कुछ अलग तरीकों से होता है, लेकिन इसे उसी तरह से संभाला जाना चाहिए।स्ट्रैटजी पैटर्न
हमारे पास एक ऑब्जेक्ट Acquisition
है जो विशिष्ट समय के लिए प्रासंगिक डेटा प्रदान करता है - मूल रूप से हार्डवेयर के विभिन्न टुकड़ों का उपयोग करके एकत्रित बाहरी डेटा का एक समूह। इसमें पहले से मौजूद डेटा की मात्रा के कारण यह बहुत बड़ा है, इसलिए मैं इसे और ज़िम्मेदारी नहीं देना चाहता हूं। अब हमें इस डेटा में से कुछ लेने की जरूरत है, और कुछ कॉन्फ़िगरेशन के आधार पर हार्डवेयर के एक टुकड़े को संबंधित वोल्टेज भेजना है।
तो, कल्पना निम्नलिखित (बहुत सरल) वर्ग:
class Acquisition
{
public Int32 IntegrationTime { get; set; }
public Double Battery { get; set; }
public Double Signal { get; set; }
}
interface IAnalogOutputter
{
double getVoltage(Acquisition acq);
}
class BatteryAnalogOutputter : IAnalogOutputter
{
double getVoltage(Acquisition acq)
{
return acq.Battery;
}
}
अब, हर ठोस रणनीति वर्ग मेरी अधिग्रहण वर्ग है, जो भी सबसे अधिक संभावना वर्गों में से एक के बाद से संशोधित किया जा रहा है के लिए युग्मित किया जाना है यह हमारे आवेदन के लिए मूल है। यह अभी भी पुराने डिजाइन पर एक सुधार है, जो Acquisition
कक्षा के अंदर एक विशाल स्विच स्टेटमेंट था। प्रत्येक प्रकार के डेटा में एक अलग रूपांतरण विधि हो सकती है (जबकि बैटरी एक साधारण पास-थ्रू है, जबकि अन्य सभी सरल नहीं हैं), इसलिए मुझे लगता है कि रणनीति पैटर्न या इसी तरह का रास्ता होना चाहिए।
मैं यह भी ध्यान दूंगा कि अंतिम कार्यान्वयन में, IAnalogOutputter
एक इंटरफेस के बजाय एक अमूर्त वर्ग होगा। ये कक्षाएं ऐसी सूची में होंगी जो उपयोगकर्ता द्वारा कॉन्फ़िगर करने योग्य है और एक XML फ़ाइल को क्रमबद्ध किया गया है। सूची रनटाइम पर संपादन योग्य होनी चाहिए और याद किया जाना चाहिए, इसलिए Serializable हमारे अंतिम समाधान का हिस्सा होना चाहिए। अगर यह एक फर्क पड़ता है।
मैं कैसे सुनिश्चित कर सकता हूं कि प्रत्येक कार्यान्वयन वर्ग को मेरे सबसे महत्वपूर्ण वर्गों में से किसी एक को टाई बिना काम करने के लिए आवश्यक डेटा मिल जाए? या क्या मैं पूरी तरह से गलत तरीके से इस तरह की समस्या का सामना कर रहा हूं?
स्पष्टीकरण के लिए - अधिग्रहण डेटा में जानकारी के लगभग 20 टुकड़े होते हैं, जिनमें से सभी का उपयोग विभिन्न वोल्टेज आउटपुट द्वारा किया जाएगा। प्रत्येक कार्यान्वयन केवल डेटा के एक टुकड़े का उपयोग करेगा, लेकिन वोल्टेज आउटपुटर के विभिन्न संभावित कार्यान्वयन के समान संख्या (20) होगी। तो मैं 'अधिग्रहण' से "दूसरी कक्षा [इसे] रणनीति कार्यान्वयनकर्ताओं को पास करने के लिए कैसे प्राप्त करूं?" हालांकि क्रमबद्धता के बारे में अच्छा बिंदु, मैं निश्चित रूप से उस पर विचार करूंगा। – drharris