Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी में रणनीति डिजाइन पैटर्न का उपयोग कैसे करें

आइए रणनीति डिजाइन पैटर्न के बारे में बात करते हैं!

यह डिज़ाइन पैटर्न आपको एक विधि के अंदर मुख्य एल्गोरिथम को बदलने में मदद करता है।

आप इसे कक्षा में हार्डकोड करने के बजाय, इस एल्गोरिथम को लागू करने वाली कक्षा में पास करके करते हैं।

और जब मैं एल्गोरिदम कहता हूं मेरा मतलब एक फैंसी कंप्यूटर साइंस एल्गोरिथम नहीं है, लेकिन कोई भी कोड जो परिणाम प्राप्त करने के लिए चरणों के अनुक्रम का पालन करता है।

रणनीति पैटर्न का उपयोग कब करें

यह पैटर्न वास्तव में किस समस्या का समाधान कर रहा है?

खुला/बंद सिद्धांत समस्या।

यह सिद्धांत कहता है कि:

<ब्लॉकक्वॉट>

"सॉफ़्टवेयर इकाइयां (वर्ग, मॉड्यूल, विधियां) विस्तार के लिए खुली होनी चाहिए और संशोधन के लिए बंद होनी चाहिए।"

इसका मतलब यह है कि एक वर्ग को नई चीजें करने के लिए आपको कक्षा को बदलने की जरूरत नहीं है। यह आपके कोड को एक ही समय में अधिक लचीला और मजबूत बनाता है।

लेकिन आप इसे कैसे पूरा करते हैं?

रणनीति पैटर्न जैसे डिज़ाइन पैटर्न का उपयोग करना 🙂

मान लें कि आपके पास ReportGenerator है वर्ग, और आप एक ही डेटा का उपयोग करके कई प्रकार के रिपोर्ट प्रारूप तैयार करना चाहते हैं।

आप प्रत्येक रिपोर्ट प्रकार के लिए एक विधि लिख सकते हैं, लेकिन इसका मतलब यह होगा कि हर बार जब आप एक नया प्रकार जोड़ना चाहते हैं, तो खुले/बंद सिद्धांत को तोड़ते हुए आपको कक्षा (एक नई विधि जोड़कर) को बदलना होगा।

या इससे भी बदतर!

आपके पास सभी प्रकार के if कथनों के साथ एक ही बड़ी विधि हो सकती है... ये अक्सर अच्छी तरह से समाप्त नहीं होती हैं।

लेकिन क्या होगा अगर कक्षा को यह नहीं पता कि रिपोर्ट को कैसे प्रारूपित किया जाए?

क्या होगा यदि एल्गोरिथम कक्षा के बाहर से आया हो ?

फिर हम जब चाहें, बिना क्लास बदले फ़ॉर्मेटिंग एल्गोरिथम बदल सकते हैं।

यह समस्या का समाधान करता है।

और ठीक यही रणनीति पैटर्न . है सब कुछ है।

रणनीति पैटर्न उदाहरण

एक रणनीति को एक विधि के साथ एक वर्ग के रूप में लागू किया जाता है।

यहां ReportGenerator . के लिए कुछ स्वरूपण कार्यनीतियां दी गई हैं कक्षा:

require 'json'

module ReportFormatters
  class JSON
    def self.format(data)
      data.to_json
    end
  end

  class PlainText
    def self.format(data)
      data.to_s
    end
  end

  class HTML
    def self.format(data)
      html = ""

      html << "
    " data.each { |product, amount| html << "
  • #{product}: #{amount}
  • " } html << "
" html end end end

ध्यान दें कि सभी रणनीतियाँ format को कैसे लागू करती हैं तरीका। इस विधि को रिपोर्ट जनरेटर वर्ग द्वारा बुलाया जाएगा।

यहां कोड है :

class ReportGenerator
  def self.generate(data, formatter)
    formatter.format(data)
  end
end

data = { onions: 31, potatoes: 24, eggs: 10 }

p ReportGenerator.generate(data, ReportFormatters::HTML)
p ReportGenerator.generate(data, ReportFormatters::JSON)
p ReportGenerator.generate(data, ReportFormatters::PlainText)

अब:

यदि आप आउटपुट स्वरूप बदलना चाहते हैं (HTML . से) करने के लिए PlainText ) आपको बस एक अलग रणनीति में पास होना है और यह तब तक काम करेगा जब तक रणनीति format लागू करती है विधि।

इस पैटर्न के बारे में सोचने का एक और तरीका यह है कि आप एक विशिष्ट व्यावसायिक रणनीति में विशेषज्ञता वाले सलाहकार को काम पर रख रहे हैं, सलाहकार आएगा और रणनीति को लागू करें आपके लिए, तो यह रणनीति एक विशिष्ट परिणाम देगी।

इसके विपरीत, डेकोरेटर पैटर्न जैसा पैटर्न क्रिसमस ट्री को अधिक आकर्षक बनाने के लिए उसमें नए आभूषण जोड़ने जैसा है।

आप एक समय में केवल 1 रणनीति के साथ काम कर सकते हैं, लेकिन आपके पास जितने चाहें उतने गहने हो सकते हैं।

वीडियो

सारांश

आपने रणनीति डिजाइन पैटर्न के बारे में सीखा है, इसका उपयोग तब करें जब आपको कक्षा को बदलने के बिना अपनी कक्षा के कुछ हिस्से को बदलने की आवश्यकता हो।

पढ़ने के लिए धन्यवाद!

इस पोस्ट को साझा करना . करना न भूलें ट्विटर पर अगर आपको यह दिलचस्प लगा , यह अधिक लोगों को भी इसका आनंद लेने में मदद करेगा 🙂


  1. रूबी ग्रेप विधि का उपयोग कैसे करें (उदाहरण के साथ)

    आइए बात करते हैं grep . के बारे में विधि। यह विधि आपके लिए क्या कर सकती है? आप ग्रेप का उपयोग एरेज़ और रेंज जैसी असंख्य वस्तुओं को फ़िल्टर करने के लिए कर सकते हैं। “लेकिन चुनें पहले से ही ऐसा करता है!” हां, लेकिन grep एक अलग तरीके से काम करता है और यह अलग परिणाम देता है। आइए कुछ उदाहरण देखें।

  1. रूबी में डेकोरेटर डिजाइन पैटर्न

    डेकोरेटर डिजाइन पैटर्न क्या है? और आप अपने रूबी प्रोजेक्ट्स में इस पैटर्न का उपयोग कैसे कर सकते हैं? डेकोरेटर डिज़ाइन पैटर्न नई क्षमताओं . जोड़कर किसी ऑब्जेक्ट को बेहतर बनाने में आपकी सहायता करता है इसमें बिना कक्षा बदले। आइए एक उदाहरण देखें! लॉगिंग और प्रदर्शन इस उदाहरण में हम रेस्ट-क्लाइंट जैस

  1. रूबी के ऐरे क्लास का उपयोग कैसे करें (उदाहरण + उपयोगी तरीके)

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