1. Home
  2. ডিজাইন প্যাটার্ন
  3. পরিচিতি:
  4. ৩। Observer Pattern

৩। Observer Pattern

Observer Pattern হলো একটি ডিজাইন প্যাটার্ন, যেখানে একটি অবজেক্ট (Subject) এর স্টেট পরিবর্তনের উপর ভিত্তি করে একাধিক অবজেক্ট (Observers) আপডেট হয়। যখন Subject অবজেক্টে কোনো পরিবর্তন ঘটে, তখন এটি তার সঙ্গে যুক্ত সকল Observer কে জানিয়ে দেয়, যাতে তারাও প্রয়োজনমতো নিজেদের আপডেট করতে পারে।

গল্প দিয়ে ব্যাখ্যা

ধরো, তোমার একটি জনপ্রিয় ইউটিউব চ্যানেল আছে, যেখানে অনেক সাবস্ক্রাইবার আছে। তোমার নতুন কোনো ভিডিও আপলোড করলে সবাইকে আলাদা আলাদা করে জানানো বেশ ঝামেলার কাজ। তাই তুমি একটি ব্যবস্থা করেছো যেখানে কেউ যদি তোমার চ্যানেল সাবস্ক্রাইব করে রাখে, তাহলে নতুন ভিডিও আপলোডের সাথে সাথে তাদের কাছে স্বয়ংক্রিয়ভাবে নোটিফিকেশন চলে যাবে। এখানে, ইউটিউব চ্যানেলটি হলো Subject এবং সাবস্ক্রাইবাররা হলো Observers

এখন, যখনই তুমি নতুন ভিডিও আপলোড করবে, চ্যানেলটি স্বয়ংক্রিয়ভাবে সব সাবস্ক্রাইবারদের (Observers) জানিয়ে দেবে।

বাস্তব উদাহরণ: Python এ Observer Pattern

Python এ সহজভাবে একটি YouTubeChannel ক্লাস তৈরি করা হয়েছে, যেটি একটি চ্যানেলের মতো কাজ করবে, আর একটি Subscriber ক্লাস হবে যা নতুন ভিডিও সম্পর্কে আপডেট পাবে।

# Subscriber ক্লাস (Observer)
class Subscriber:
    def __init__(self, name):
        self.name = name

    def update(self, video_title):
        print(f"{self.name} notified: New video uploaded - {video_title}")

# YouTubeChannel ক্লাস (Subject)
class YouTubeChannel:
    def __init__(self):
        self.subscribers = []
    
    def subscribe(self, subscriber):
        self.subscribers.append(subscriber)
    
    def unsubscribe(self, subscriber):
        self.subscribers.remove(subscriber)
    
    def notify_subscribers(self, video_title):
        for subscriber in self.subscribers:
            subscriber.update(video_title)
    
    def upload_video(self, video_title):
        print(f"Uploading video: {video_title}")
        self.notify_subscribers(video_title)

# উদাহরণ হিসেবে অবজার্ভার প্যাটার্নের ব্যবহার দেখা যাক
channel = YouTubeChannel()

# কয়েকজন সাবস্ক্রাইবার তৈরি করা হচ্ছে
subscriber1 = Subscriber("Alice")
subscriber2 = Subscriber("Bob")

# সাবস্ক্রাইবারদের চ্যানেলে যুক্ত করা হচ্ছে
channel.subscribe(subscriber1)
channel.subscribe(subscriber2)

# নতুন ভিডিও আপলোড করা
channel.upload_video("Learn Python Design Patterns")

# Output:
# Uploading video: Learn Python Design Patterns
# Alice notified: New video uploaded - Learn Python Design Patterns
# Bob notified: New video uploaded - Learn Python Design Patterns

ব্যাখ্যা

  • Subscriber (Observer): প্রতিটি সাবস্ক্রাইবার update() মেথডের মাধ্যমে নোটিফিকেশন পায় যখন নতুন ভিডিও আপলোড হয়।
  • YouTubeChannel (Subject): এই ক্লাসে subscribe() এবং unsubscribe() মেথডের মাধ্যমে সাবস্ক্রাইবার যুক্ত বা বাদ দেওয়া যায়। যখন নতুন ভিডিও আপলোড হয়, notify_subscribers() মেথডটি সমস্ত সাবস্ক্রাইবারকে আপডেট পাঠায়।

Observer Pattern কেন প্রয়োজন?

  • রিয়েল-টাইম আপডেট: এটি বিভিন্ন অবজেক্টের মধ্যে রিয়েল-টাইম কমিউনিকেশন বা নোটিফিকেশন ব্যবস্থা গড়ে তোলে।
  • ডেকাপলিং: অবজেক্টগুলোর মধ্যে সরাসরি সংযোগ না রেখে স্বয়ংক্রিয়ভাবে আপডেট পেতে সহায়ক।

সংক্ষেপে

Observer Pattern এমন পরিস্থিতিতে উপকারী যেখানে একাধিক অবজেক্টকে একটি অবজেক্টের স্টেট পরিবর্তনের উপর ভিত্তি করে আপডেট রাখা দরকার, যেমন ইউটিউব চ্যানেলের সাবস্ক্রাইবার নোটিফিকেশন।

How can we help?