আপনি কি কখনো এমন একটি ক্লাস তৈরি করতে চেয়েছেন যেখানে শুধুমাত্র একটি উদাহরণ থাকতে পারে?
হ্যাঁ? না? হতে পারে?
আচ্ছা…
ঠিক এটাই সিঙ্গেলটন প্যাটার্ন হয়৷
৷এতে কোনো সমস্যা নেই।
কিন্তু কিছু লোক এটিকে অ্যান্টি-প্যাটার্ন বলে কারণ এটি খারাপ ডিজাইনের জন্য একটি অজুহাত হিসাবে ব্যবহার করা যেতে পারে।
আসুন একটি কোডের উদাহরণ দেখি যাতে আপনি এটি কীভাবে কাজ করে তা শিখতে পারেন।
সিঙ্গলটন প্যাটার্ন কোড উদাহরণ
সিঙ্গেলটন প্যাটার্নের ধারণা হল আপনি শুধুমাত্র একটি উদাহরণ সহ একটি ক্লাস চান।
এখানে কিভাবে :
- আপনি
new
করেন পদ্ধতি ব্যক্তিগত - আপনি
instance
নামের একটি ক্লাস পদ্ধতি সংজ্ঞায়িত করেন যা ক্লাসের জন্য অনন্য উদাহরণ প্রদান করে
কারণ এটি একটি জনপ্রিয় ডিজাইন প্যাটার্ন, রুবি স্ট্যান্ডার্ড লাইব্রেরি একটি Singleton
সহ আসে মডিউল আপনি যেকোনো ক্লাসে অন্তর্ভুক্ত করতে পারেন।
এটা এরকম দেখাচ্ছে :
require 'singleton' class Shop include Singleton end
এখন আপনি যদি একটি Shop
তৈরি করার চেষ্টা করেন Shop.new
সহ বস্তু আপনি এটি দেখতে পাবেন:
Shop.new # NoMethodError: private method `new' called for Shop:Class
এবং যদি আপনি একটি এবং শুধুমাত্র Shop
পেতে চান বস্তুটি আপনি instance
ব্যবহার করতে পারেন পদ্ধতি:
Shop.instance.object_id # 5659218 Shop.instance.object_id # 5659218
আপনি বলতে পারেন এটি সবসময় একই বস্তু কারণ object_id
কখনই পরিবর্তন হয় না।
আপনার যা মনে রাখা দরকার :
এটি একটি সাধারণ প্যাটার্ন, এটি অবজেক্ট তৈরিকে 1টি অবজেক্টের মধ্যে সীমাবদ্ধ করে এবং আপনি যখনই চান সেই বস্তুর অনুরোধ করতে পারেন।
কেন আপনার এই প্যাটার্নটি ব্যবহার করা উচিত নয়
সিঙ্গলটন প্যাটার্ন প্রায়শই গ্লোবাল ভেরিয়েবলের কিছু ফর্ম থাকার একটি অজুহাত এবং আমরা জানি যে গ্লোবাল ভেরিয়েবলগুলি খারাপ কারণ তাদের উপর আপনার কোন নিয়ন্ত্রণ নেই। এটি পরীক্ষা করা কঠিন করে তোলে এবং এটি কাপলিং বাড়াতে পারে।
"Singletons এর আসল সমস্যা হল যে তারা আপনাকে একটি বস্তুর উপযুক্ত দৃশ্যমানতা সম্পর্কে সাবধানে চিন্তা না করার জন্য একটি ভাল অজুহাত দেয়।" – কেন্ট বেক
এমন একটি বস্তুর কল্পনা করুন যার উপর আপনার বেশিরভাগ ক্লাস নির্ভর করে, এটাই সিঙ্গলটন প্যাটার্ন হয়ে উঠতে পারে। সৌভাগ্য যে রিফ্যাক্টর!
এখন :
এই প্যাটার্নের জন্য কোন ভাল ব্যবহার আছে?
গিথুবে অনুসন্ধান করা নাল অবজেক্ট প্যাটার্নের সাথে একযোগে সিঙ্গেলটন প্যাটার্ন ব্যবহার করে কিছু রেপো তৈরি করেছে।
আমি অনুমান করি এটি অর্থপূর্ণ, Rails এটিকে অ্যাকশনপ্যাকের অংশ হিসাবে ব্যবহার করে৷
এখানে কোডটি আছে :
class AllType < Type include Singleton def initialize super "*/*", :all end def all?; true; end def html?; true; end end
এটি এমন একটি শ্রেণী যা Type
থেকে উত্তরাধিকার সূত্রে প্রাপ্ত .
যখন আপনি একটি AllType
তৈরি করেন instance
এর মাধ্যমে বস্তু পদ্ধতি, এটি সুপার কল করবে এবং অবজেক্ট রিটার্ন করবে।
প্রতিবার আপনি instance
কল করেন এর পরে আপনি একই বস্তু পাবেন।
উপসংহারে :
হ্যাঁ, এই প্যাটার্নটি সঠিক পরিস্থিতিতে উপযোগী হতে পারে, কিন্তু আপনি এটি সম্পর্কে অনেক চিন্তা না করে এটি ব্যবহার করতে চান না৷
ভিডিও
সারাংশ
আপনি সিঙ্গেলটন ডিজাইন প্যাটার্ন সম্পর্কে শিখেছেন, কীভাবে এটি রুবিতে প্রয়োগ করতে হয় এবং কেন আপনার বেশিরভাগ সময় এটি এড়ানো উচিত।
আপনি এই প্যাটার্ন সম্পর্কে কি মনে করেন? আপনি এটা আগে দেখেছেন? আমাকে কমেন্টে জানান 🙂
পড়ার জন্য ধন্যবাদ!