Observer Pattern এবং Data Streams

Reactive Programming - প্রোগ্রামিং মেথডলোজি (Programming Methodologies) - Computer Science

282

Observer Pattern

Observer Pattern হল একটি ডিজাইন প্যাটার্ন যা এক বা একাধিক অবজেক্টকে (অবজার্ভার) একটি নির্দিষ্ট অবজেক্টের (সাবজেক্ট) অবস্থার পরিবর্তন সম্পর্কে অবহিত করার জন্য ব্যবহৃত হয়। এটি বিশেষভাবে উপকারী যখন একাধিক ক্লায়েন্ট একটি একক অবজেক্টের পরিবর্তনের উপর নির্ভরশীল থাকে।

বৈশিষ্ট্য

  • এক-টু-মেনি সম্পর্ক: সাবজেক্ট এবং অবজার্ভারের মধ্যে একটি এক-টু-মেনি সম্পর্ক স্থাপন করে, যাতে একটি সাবজেক্ট পরিবর্তিত হলে তার সব অবজার্ভারকে অবহিত করা হয়।
  • ডাইনামিক সাবস্ক্রিপশন: অবজার্ভারগুলি সহজেই সাবজেক্টে যুক্ত বা বর্জিত হতে পারে।
  • অবজেক্টের বিচ্ছিন্নতা: সাবজেক্ট এবং অবজার্ভার আলাদাভাবে পরিচালিত হয়, যা তাদের মধ্যে কঠোর সম্পর্ক দূর করে।

উদাহরণ

নিচে একটি সাধারণ Observer Pattern উদাহরণ দেখা যাবে যেখানে একজন গ্রাহক (অবজার্ভার) একটি দোকানের ইনভেন্টরির পরিবর্তনের জন্য নিবন্ধিত হয়েছে।

class Subject:
    def __init__(self):
        self._observers = []

    def attach(self, observer):
        self._observers.append(observer)

    def detach(self, observer):
        self._observers.remove(observer)

    def notify(self):
        for observer in self._observers:
            observer.update(self)

class Observer:
    def update(self, subject):
        raise NotImplementedError("Subclasses must implement this method.")

class Customer(Observer):
    def update(self, subject):
        print("Notification: Inventory has changed. New count:", subject.get_inventory_count())

class Inventory(Subject):
    def __init__(self):
        super().__init__()
        self._count = 0

    def add_item(self):
        self._count += 1
        self.notify()

    def get_inventory_count(self):
        return self._count

# ব্যবহার
inventory = Inventory()
customer = Customer()

inventory.attach(customer)
inventory.add_item()  # Output: Notification: Inventory has changed. New count: 1
inventory.add_item()  # Output: Notification: Inventory has changed. New count: 2

Data Streams

Data Streams হল একটি ধারাবাহিক ডেটার প্রবাহ যা এক বা একাধিক উৎস থেকে সময়ের সাথে সাথে আসে। এটি বাস্তব সময়ের তথ্যের প্রবাহকে চিত্রিত করে, যেমন ব্যবহারকারীর ইনপুট, IoT ডিভাইস থেকে ডেটা, বা সামাজিক মিডিয়া ফিড। Reactive Programming এ ডেটা স্ট্রিমগুলি কেন্দ্রবিন্দুতে থাকে এবং অ্যাসিনক্রোনাসভাবে পরিচালনা করা হয়।

বৈশিষ্ট্য

  • অ্যাসিনক্রোনাস: ডেটা স্ট্রিমগুলি সাধারণত অ্যাসিনক্রোনাস, যা মানে যে ডেটা আসে যখন এটি প্রস্তুত হয় এবং প্রক্রিয়া চলতে থাকে।
  • প্রতিক্রিয়াশীলতা: ডেটার পরিবর্তনের প্রতি প্রতিক্রিয়া দেওয়া হয়। যখন নতুন ডেটা আসে, তা প্রক্রিয়া করা হয়।
  • ভিন্ন উৎস: বিভিন্ন উৎস থেকে ডেটা স্ট্রিম হতে পারে, যেমন API কল, ডাটাবেস পরিবর্তন, বা ব্যবহারকারীর ইভেন্ট।

উদাহরণ

RxJS (Reactive Extensions for JavaScript) ব্যবহার করে একটি ডেটা স্ট্রিমের উদাহরণ:

const { fromEvent } = require('rxjs');
const { map } = require('rxjs/operators');

// Create a stream from a button click event
const button = document.getElementById('myButton');
const buttonClickStream = fromEvent(button, 'click').pipe(
  map(event => event.clientX) // Map to the x coordinate of the click
);

// Subscribe to the stream
buttonClickStream.subscribe(x => {
  console.log(`Button clicked at x: ${x}`);
});

Observer Pattern এবং Data Streams এর মধ্যে সম্পর্ক

  1. Observer Pattern ডেটা স্ট্রিমের ভিত্তিতে কাজ করে, যেখানে স্ট্রিমের পরিবর্তনগুলি অবজার্ভারদের মাধ্যমে অনুধাবন করা হয়।
  2. ডেটা স্ট্রিমের তথ্য পরিবর্তন হলে, অবজার্ভারদের অবহিত করার মাধ্যমে নতুন তথ্য প্রসেসিং করা হয়।
  3. Reactive Programming এ Observer Pattern এর ব্যবহার, যেমন RxJS, ডেটা স্ট্রিমের পরিবর্তনগুলির প্রতি বাস্তব সময়ের প্রতিক্রিয়া নিশ্চিত করে।

উপসংহার

Observer Pattern এবং Data Streams একসাথে কাজ করে যাতে ডেটার পরিবর্তনগুলি কার্যকরভাবে পরিচালনা এবং পর্যবেক্ষণ করা যায়। Observer Pattern বাস্তবায়নের মাধ্যমে ডেটা স্ট্রিমের উপর প্রতিক্রিয়া প্রদানের একটি কার্যকরী উপায় প্রদান করে, যা আধুনিক সফটওয়্যার উন্নয়নে গুরুত্বপূর্ণ।

Content added By
Promotion

Are you sure to start over?

Loading...