কম্পিউটার

রুবিতে কৌশল ডিজাইন প্যাটার্ন কীভাবে ব্যবহার করবেন

আসুন কৌশল ডিজাইন প্যাটার্ন সম্পর্কে কথা বলি!

এই ডিজাইন প্যাটার্ন আপনাকে একটি পদ্ধতির মধ্যে প্রধান অ্যালগরিদম পরিবর্তন করতে সাহায্য করে।

আপনি ক্লাসে হার্ডকোড করার পরিবর্তে এই অ্যালগরিদমটি প্রয়োগ করে এমন একটি ক্লাসে পাস করে এটি করবেন৷

এবং যখন আমি বলি অ্যালগরিদম আমি একটি অভিনব কম্পিউটার বিজ্ঞান অ্যালগরিদম বলতে চাচ্ছি না, তবে ফলাফল পাওয়ার জন্য ধাপের ক্রম অনুসরণ করে এমন যেকোনো কোড।

কৌশল প্যাটার্ন কখন ব্যবহার করবেন

এই প্যাটার্নটি ঠিক কোন সমস্যার সমাধান করছে?

খোলা/বন্ধ নীতি সমস্যা।

এই নীতিটি বলে যে:

"সফ্টওয়্যার সত্তা (ক্লাস, মডিউল, পদ্ধতি) এক্সটেনশনের জন্য খোলা এবং পরিবর্তনের জন্য বন্ধ হওয়া উচিত।"

এর মানে হল যে একটি ক্লাসকে নতুন জিনিস করার জন্য আপনাকে ক্লাস পরিবর্তন করতে হবে না। এটি একই সাথে আপনার কোডকে আরও নমনীয় এবং শক্তিশালী করে তোলে৷

কিন্তু আপনি কিভাবে তা সম্পন্ন করবেন?

কৌশল প্যাটার্নের মত ডিজাইন প্যাটার্ন ব্যবহার করা 🙂

ধরা যাক আপনার কাছে একটি ReportGenerator আছে ক্লাস, এবং আপনি একই ডেটা ব্যবহার করে অনেক ধরণের রিপোর্ট ফর্ম্যাট তৈরি করতে চান।

আপনি প্রতিটি প্রতিবেদনের প্রকারের জন্য একটি পদ্ধতি লিখতে পারেন, কিন্তু এর অর্থ হল আপনি যখনই খোলা/বন্ধ নীতিটি ভেঙে নতুন টাইপ যোগ করতে চান তখন আপনাকে ক্লাস পরিবর্তন করতে হবে (একটি নতুন পদ্ধতি যোগ করে)।

অথবা আরও খারাপ!

আপনার কাছে সব ধরনের ইফ স্টেটমেন্ট সহ একটি একক বিশাল পদ্ধতি থাকতে পারে... এগুলো প্রায়ই ভালোভাবে শেষ হয় না।

কিন্তু যদি ক্লাসের রিপোর্টগুলি কীভাবে ফর্ম্যাট করতে হয় তা জানতে না হয়?

যদি অ্যালগরিদম ক্লাসের বাইরে থেকে আসে ?

তারপরে আমরা ক্লাস পরিবর্তন না করে যখনই চাই তখন ফর্ম্যাটিং অ্যালগরিদম পরিবর্তন করতে পারি।

এটি সমস্যার সমাধান করে।

এবং কৌশল প্যাটার্ন ঠিক তাই সব সম্পর্কে।

কৌশল প্যাটার্ন উদাহরণ

একটি কৌশল একটি একক পদ্ধতি সহ একটি ক্লাস আকারে প্রয়োগ করা হয়।

এখানে 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. রুবি আলিয়াস কীওয়ার্ড কীভাবে ব্যবহার করবেন

  2. রুবি গ্রেপ পদ্ধতি কীভাবে ব্যবহার করবেন (উদাহরণ সহ)

  3. রুবিতে ডেকোরেটর ডিজাইন প্যাটার্ন

  4. রুবির অ্যারে ক্লাস কীভাবে ব্যবহার করবেন (উদাহরণ + দরকারী পদ্ধতি)