برنامه نویسی

سری طراحی سیستم – روز 2: الگوهای طراحی Observer

به روز 2 سری یادگیری طراحی سیستم من خوش آمدید! امروز ، بیایید به الگوهای طراحی ، الگوی Observer شیرجه بزنیم.
📌 استفاده از مورد: روش های پرداخت در تجارت الکترونیکی (کارت اعتباری ، پی پال ، UPI).
🔹 الگوی طراحی Observer (نمای کلی)
الگوی Observer یک وابستگی یک به یک به بسیاری از اشیاء را ایجاد می کند ، بنابراین وقتی یک شی (قابل مشاهده) تغییر می کند ، به همه اشیاء وابسته (ناظران) اطلاع داده می شود.
📌 استفاده از مورد: سیستم های اعلان ، شنوندگان رویداد ، به روزرسانی قیمت سهام.
🔍 شیرجه عمیق: الگوی ناظر – سوال مصاحبه Walmart SDE
❓ اجرای یک تابع Notify برای اطلاع از همه مشترکین در هنگام وقوع یک رویداد.
💡 راه حل:
1⃣ یک مشاهده کننده (ناشر) را تعریف کنید که لیستی از ناظران را حفظ می کند.
2⃣ اجرای روش های ضمیمه ، جدا کردن و اطلاع رسانی.
3⃣ محصول قابل مشاهده است: هر زمان که ویژگی های محصول تغییر می کند ، همه ناظران به روز می شوند.
4⃣ ناظران (مشترکان) هنگام اطلاع رسانی واکنش نشان می دهند.

در اینجا اجرای الگوی Observer برای مشکل با استفاده از JavaScript آورده شده است:

class Observable {
 constructor() { 
 this.observers = []; //maintaining list of observer
 }

 attach(observer) {
 this.observers.push(observer); //adding new observer
 }

 detach(observer) {
 this.observers = this.observers.filter(obs => obs !== observer); 
 //removing an observer in case of unsubscribing from notification service
 }

 notify(data) {
 this.observers.forEach(observer => observer.update(data));
 }
}

class Product extends Observable {
 constructor(name, price) {
 super();
 this._name = name;
 this._price = price;
 }

// calling notify() whenever product value changes
 set name(newName) {
 this._name = newName;
 this.notify(`Product name updated to: ${newName}`);
 }

 set price(newPrice) {
 this._price = newPrice;
 this.notify(`Price updated to: $${newPrice}`);
 }
}


// creating an observer class to identify each observer
class Observer {
 constructor(name) {
 this.name = name;
 }

 update(message) {
 console.log(`${this.name} received update: ${message}`);
 }
}

// Usage Example:
const product = new Product("Laptop", 1000);

const observer1 = new Observer("Observer 1");
const observer2 = new Observer("Observer 2");

product.attach(observer1);
product.attach(observer2);

product.price = 1200; // Notifies observers
product.name = "Gaming Laptop"; // Notifies observers

observable.notify("New Event Occurred!"); // Both observers get notified
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

محصول const = محصول جدید (“لپ تاپ” ، 1000) ؛

const Observer1 = Observer جدید (“Observer 1”) ؛
const Observer2 = New Observer (“Observer 2”) ؛

Product.Attach (Observer1) ؛
Product.Attach (Observer2) ؛

Product.Price = 1200 ؛ // به ناظران اطلاع می دهد
product.name = “لپ تاپ بازی” ؛ // به ناظران اطلاع می دهد

Observable.Notify (“رویداد جدید رخ داده است!”) ؛ // هر دو ناظران مطلع می شوند

🌟 غذای اصلی
✅ جفت شل: ناظران و ناظران با حداقل وابستگی در تعامل هستند.
✅ انعطاف پذیری: ناظران جدید را می توان به صورت پویا اضافه و حذف کرد.
cases موارد استفاده در دنیای واقعی: خدمات اطلاع رسانی ، به روزرسانی بازار سهام ، سیستم های محور رویداد.
شما در مورد الگوی Observer چیست؟ آیا در سناریوهای دنیای واقعی با آن روبرو شده اید؟ بیایید در نظرات بحث کنیم! 🚀

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا