কম্পিউটার টিউটোরিয়াল

রুবিতে সিঙ্গল্টন প্যাটার্ন আয়ত্ত করুন – প্র্যাক্টিক্যাল গাইড এবং কেন এটিকে এড়ানো ভালো হতে পারে

আপনি কি কখনো একটি ক্লাস তৈরি করতে চেয়েছেন যাতে শুধু একটি ইনস্ট্যান্স থাকতে পারে?

হ্যাঁ? না? হয়তো?

যদিও...

এটিই হলো সিঙ্গল্টন প্যাটার্ন।

এতে কোনো সমস্যা নেই।

কিন্তু কিছু লোক এটিকে একটি অ্যান্টি-প্যাটার্ন বলে কারণ এটি খারাপ ডিজাইনের জন্য অफ़সোস হিসেবে ব্যবহার হতে পারে।

আসুন একটি কোড উদাহরণ দেখি যাতে আপনি শিখতে পারেন এটি কীভাবে কাজ করে।

সিঙ্গল্টন প্যাটার্ন কোড উদাহরণ

সিঙ্গল্টন প্যাটার্নের ধারণা হলো আপনি একটি ক্লাস চান যার শুধু একটি ইনস্ট্যান্স থাকবে।

এটি কীভাবে:

  • আপনি new মেথডকে প্রাইভেট করেন
  • আপনি একটি ক্লাস মেথড সংজ্ঞায়িত করেন যার নাম instance যা ক্লাসের জন্য ইউনিক ইনস্ট্যান্স ফেরত দেয়

যেহেতু এটি একটি জনপ্রিয় ডিজাইন প্যাটার্ন, রুবি স্ট্যান্ডার্ড লাইব্রেরিতে একটি Singleton মডিউল আছে যা আপনি যেকোনো ক্লাসে ইনক্লুড করতে পারেন।

এটি এরকম দেখায়:

require 'singleton'
class Shop
  include Singleton
end

এখন যদি আপনি Shop.new দিয়ে একটি Shop অবজেক্ট তৈরি করার চেষ্টা করেন তবে আপনি এটি দেখবেন:

Shop.new # NoMethodError: private method `new' called for Shop:Class

এবং যদি আপনি একমাত্র Shop অবজেক্টটি পেতে চান তবে আপনি instance মেথড ব্যবহার করতে পারেন:

Shop.instance.object_id # 5659218
Shop.instance.object_id # 5659218

আপনি বুঝতে পারেন এটি সবসময় একই অবজেক্ট কারণ object_id কখনোই পরিবর্তন হয় না।

আপনার মনে রাখতে হবে:

এটি একটি সিম্পল প্যাটার্ন, এটি অবজেক্ট তৈরিকে ১টি অবজেক্টে সীমাবদ্ধ করে এবং আপনি যখন চান সেটি অনুরোধ করতে পারেন।

কেন আপনাকে এই প্যাটার্ন ব্যবহার করা উচিত নয়

সিঙ্গল্টন প্যাটার্ন প্রায়শই একটি গ্লোবাল ভেরিয়েবলের আকারে থাকার একটি অफ़সোস হিসেবে কাজ করে এবং আমরা জানি গ্লোবাল ভেরিয়েবল খারাপ কারণ আপনার ওপর কোনো কন্ট্রোল নেই। এতে টেস্ট করা কঠিন হয় এবং কাপলিং বাড়তে পারে।

"সিঙ্গল্টন-এর আসল সমস্যা হলো এটি আপনাকে এমন একটি ভালো অफ़সোস দেয় যে আপনি একটি অবজেক্টের উপযুক্ত ভিজিবিলিটি সম্পর্কে যত্ন पूर्वক চিন্তা করছেন না।" — কেন্ট বেক

কল্পনা করুন একটি অবজেক্ট আছে যার ওপর আপনার অধিকাংশ ক্লাস ডিপেন্ড করছে, সেটিই সিঙ্গল্টন প্যাটার্নে পরিণত হতে পারে। সেটি রিফ্যাক্টর করার শুভকামনা!

এখন:

এই প্যাটার্নের কোনো ভালো ব্যবহার আছে কি?

গিটহাবে সার্চ করলে সিঙ্গল্টন প্যাটার্ন নাল অবজেক্ট প্যাটার্নের সাথে ব্যবহার করা কিছু রিপো পাওয়া গেলো।

আমি মনে করি এটা মেনে যায়, রেইলস এটি অ্যাকশনপ্যাকের অংশ হিসেবে ব্যবহার করে।

এখানে কোডটি:

class AllType < Type
  include Singleton
  def initialize
    super "*/*", :all
  end
  def all?; true; end
  def html?; true; end
end

এটি একটি ক্লাস যা Type-র থেকে ইনহেরিট করেছে।

যখন আপনি instance মেথড দিয়ে একটি AllType অবজেক্ট তৈরি করেন, এটি সুপার কল করে এবং অবজেক্টটি ফেরত দেয়।

उसके পরে প্রতি বার আপনি instance কল করলে আপনি একই অবজেক্ট পাবেন।

উপসংহারে:

হ্যাঁ, এই প্যাটার্ন সঠিক পরিস্থিতিতে উপকারী হতে পারে, কিন্তু আপনি এটি অনেক চিন্তা না করে ব্যবহার করতে চাবেন না।

ভিডিও

সারসংক্ষেপ

আপনি সিঙ্গল্টন ডিজাইন প্যাটার্ন সম্পর্কে শিখতে পেরেছেন, কীভাবে রুবিতে এটি ইমপ্লিমেন্ট করবেন এবং অধিকাংশ সময় কেন এটিকে এড়ানো উচিত।

আপনি এই প্যাটার্ন সম্পর্কে কী মনে করেন? কি আগে দেখেছেন? কমেন্টে জানান 🙂

পড়ার জন্য ধন্যবাদ!

  1. সঠিক রুবি IDE বেছে নিন: ডেভেলপারদের জন্য একটি প্র্যাক্টিক্যাল গাইড

  2. রুবি মাস্টারিং: মেথড এলিয়াস তৈরি করার জন্য Alias কিওয়ার্ড ব্যবহার

  3. আপনার আইফোন সহজে রিনেম করুন এবং এটি কেন গুরুত্বপূর্ণ

  4. মাইক্রোসফট এডিটর মাস্টার করুন: ফিচার ও সেরা অভ্যাসের সম্পূর্ণ গাইড