2009-04-14 14 views
5

हमारे पूरे कोडबेस पर हमारे पास यह दोहराया गया पैटर्न है जहां एक विधि के साथ एक इंटरफ़ेस है। क्या यह एक वास्तविक डिजाइन पैटर्न है? यदि हां, तो यह क्या है और लाभ क्या होंगे?क्या यह एक डिज़ाइन पैटर्न है?

public interface IRunnable 
    {  
     void Run();  
    } 

    public interface IAction 
    { 
     void Perform(); 
    } 

    public interface ICommand 
    { 
     void Execute(ActionArgs _actionargs); 
    } 

उत्तर

5

मैं इस Command pattern के रूप में संदर्भित देखा है:

यहाँ कुछ उदाहरण हैं।

मैं पहली बार अंकल बॉब Agile Principles, Patterns, and Practices in C# पढ़ने इसके बारे में सीखा है।

मेरा मानना ​​है कि इसकी भव्यता अपनी सादगी है। मैंने फाइल प्रसंस्करण सेवा लिखने पर इसका इस्तेमाल किया है। सेवा ने फ़ाइलों को पढ़ने/हटाने के सभी प्रशासन का प्रदर्शन किया। जब किसी फ़ाइल को संसाधित करने की आवश्यकता होती है, तो यह संबंधित प्लगइन लोड किया गया था। प्रत्येक प्लगइन ने Process विधि लागू की, और उस प्रकार की फ़ाइल को संसाधित करने के लिए जो कुछ भी आवश्यक था, किया। (मुख्य रूप से, सामग्री को पार्स करें और डेटाबेस में डालें।)

हर बार मुझे एक नए लेआउट के साथ एक नई फ़ाइल प्रकार को संसाधित करना पड़ता था, मुझे बस एक नया प्लगइन बनाना था जो Process लागू किया गया था।

यह मेरे लिए काम करता था क्योंकि मुझे एक साधारण समाधान की आवश्यकता थी। यदि आपको एक से अधिक पैरामीटर लेने की आवश्यकता है, तो शायद यह उपयोग करने के लिए पैटर्न नहीं है।

2

इनमें से किसी बहुत अच्छी तरह से, Command Pattern के विशिष्ट मामलों हो सकता है कि यह कैसे उपयोग किया जा रहा है और संदर्भ के आधार पर। इसका एक हिस्सा इस बात पर निर्भर करेगा कि आप इसे क्यों और कैसे स्थापित कर रहे हैं।

आदेश पैटर्न भी सामान्य रूप से राज्य की और विभिन्न वस्तुओं की एक अवधारणा भी शामिल है। आम तौर पर, इस प्रकार का इंटरफ़ेस सुझाव देगा कि, इसलिए मैं अनुमान लगा रहा हूं कि आप यहां एक डिजाइन पैटर्न के रूप में क्या सोच रहे हैं, लेकिन कॉलर या एकाधिक लक्ष्यों के बिना यह बताना मुश्किल है कि यह इसका एक उत्कृष्ट उदाहरण है या नहीं। ..

बहरहाल, यह, में और स्वयं का, मेरे लिए सिर्फ बुनियादी इंटरफ़ेस अमूर्त, और न कुछ मैं एक डिजाइन पैटर्न के रूप में वर्गीकृत होता है।

1

मुझे यकीन है कि है कि क्या आप यह इंटरफेस आपके द्वारा दी गई के रूप में एक डिजाइन पैटर्न फोन समाधान करने के लिए आमतौर पर अनुभव समस्याओं बल्कि समाधान परियोजना में बहुत विशिष्ट समस्याओं है कि आप विकसित कर रहे हैं करने के लिए प्रदान नहीं करता है हो सकता है नहीं कर रहा हूँ।

इंटरफेस का उपयोग करने के कारण आप सही तरीके से उपयोग कर रहे हैं इस तथ्य के कारण है कि आपके पास उन सभी वर्गों की आवश्यकता नहीं है जिनके लिए इन विधियों की आवश्यकता है, जिसमें बेस क्लास शामिल है, फिर भी आपको यह जानने की आवश्यकता है कि विशिष्ट वर्ग इन्हें लागू करने का वादा करते हैं।

, हो सकता है जैसा कि पिछले पोस्टर के कुछ सुझाव: http://en.wikipedia.org/wiki/Command_pattern

1

आप लैम्ब्डा भाव का उपयोग करके इस पुनरावृत्ति को हटा सकते हैं (या इसे भविष्य कोड के लिए रोकने के)। Lambda अभिव्यक्ति बिल्कुल इस स्थिति के लिए हैं।

1

यदि कुछ भी है, तो यह एक मजेदार है। इसका उपयोग प्रथम श्रेणी के फ़ंक्शन (पॉइंटर) के बिना भाषाओं में किया जाता है जैसे चीजों के फ़ंक्शन (पॉइंटर) के लिए उपयोग किया जाता है, जैसे कि थ्रेड के लिए मुख्य फ़ंक्शन।

1

इंटरफेस के लिए केवल एक विधि के साथ अनुप्रयोग हैं। मेरा मतलब है, .NET में बहुत सारे हैं - INOTifyPropertyChanged, एक के लिए (PropertyChanged ईवेंट)। यह सिर्फ गारंटी देता है कि किसी ऑब्जेक्ट की एक निश्चित विधि होती है (चाहे वह वास्तव में किस प्रकार की वस्तु है), ताकि आप इसे कॉल कर सकें (फिर भी, प्रकार के बावजूद)।

Dim runnableObjects As List(Of Object) 
runnableObjects.Add(New MyRunnableObject1) 
runnableObjects.Add(New MyRunnableObject2) 

For Each o As IRunnable In runnableObjects 
    o.Run() 
Next 
2

जैसा कि कहा गया था कि यह Command Design Pattern है। लेकिन यह (मेरे लिए) परिणाम प्राप्त करने के जावा तरीके की तरह है। सी # में आप प्रतिनिधियों और सी ++ फ़ंक्शन पॉइंटर्स और फ़ैक्टर में उपयोग कर सकते हैं।

यदि आपके पास पहले से ही कुछ क्लास विधि में प्रतिक्रिया का कुछ कार्यान्वयन है तो अधिक से अधिक कक्षाएं बनाने की कोई बड़ी समझ नहीं है। जिसे आप सी ++ में बांध सकते हैं या सी # में प्रतिनिधि बनने के लिए सेट कर सकते हैं। जावा में मुझे लगता है कि आपके पास जो कोड मिला है उसे लिखने के अलावा आपके पास कोई विकल्प नहीं है।

0

शायद मुझे कुछ याद आ रहा है, लेकिन पहले दो रूपों की तरह वे strategy pattern का हिस्सा हो सकते हैं। असल में, किसी ऑब्जेक्ट में प्रकार IAction का सदस्य होता है, और उस सदस्य को किसी विशेष तरीके से कार्य करने के लिए सिस्टम की ज़रूरतों के आधार पर रनटाइम पर आवंटित/पुन: असाइन किया जाता है (यानी एक विशेष रणनीति का उपयोग करके)।

संबंधित मुद्दे