Table of Contents
ایجاد یک سیستم اطلاع رسانی انعطاف پذیر برای برنامه های نرم افزار مدرن ضروری است. الگوی ناظر، یک الگوی طراحی در مهندسی نرم افزار، یک راه حل ظریف برای اجرای چنین سیستم هایی در پایتون فراهم می کند.این اجازه می دهد تا اشیاء به صورت پویا و به روز رسانی از دیگر اشیاء را به صورت پویا، ترویج اتصال شل و مقیاس پذیری دریافت کنند.
درک الگوی ناظر
الگوی ناظر یک وابستگی یک به چند بین اشیاء را تعریف می کند، زمانی که وضعیت یک شی (موضوع) تغییر می کند، تمام وابستگی های آن (observers) به طور خودکار مطلع می شوند.این الگو به ویژه برای اجرای سیستم های کنترل رویداد مفید است، مانند اعلان ها، که در آن اجزای متعدد باید به تغییرات واکنش نشان دهند.
پیاده سازی الگوی در پایتون
در پایتون، الگوی ناظر می تواند با استفاده از کلاس ها و روش ها اجرا شود.موضوع لیستی از ناظران را حفظ می کند و روش هایی برای اتصال، detach و اطلاع رسانی به آنها فراهم می کند.
ایجاد کلاس موضوع
کلاس موضوع یک لیست از ناظران را مدیریت می کند و روش هایی برای تغییر و اطلاع رسانی به آنها فراهم می کند.
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, message):
for observer in self.observers:
observer.update(message)
ایجاد رابط ناظر
ناظران باید یک روش به روز رسانی برای رسیدگی به اعلان ها را پیاده سازی کنند.
class Observer:
def update(self, message):
raise NotImplementedError("Subclass must implement update method")
اجرای رصد کنندگان Concrete
ناظران بتنی واکنش های خاصی را به اعلان ها تعریف می کنند، مانند چاپ یک پیام یا به روز رسانی رابط کاربری.
class EmailNotification(Observer):
def update(self, message):
print(f"Sending email notification: {message}")
class LogNotification(Observer):
def update(self, message):
print(f"Logging message: {message}")
استفاده از سیستم اعلان
برای استفاده از سیستم، ایجاد یک موضوع، ناظران پیوست و ارسال اعلان ها، این تنظیمات اجازه می دهد تا ناظران را به صورت پویا اضافه یا حذف کنید.
# Create subject
notification_center = Subject()
# Create observers
email_alert = EmailNotification()
log_alert = LogNotification()
# Attach observers
notification_center.attach(email_alert)
notification_center.attach(log_alert)
# Send a notification
notification_center.notify("New message received!")
این الگو تضمین می کند که سیستم اطلاع رسانی شما انعطاف پذیر و به راحتی قابل گسترش است.شما می توانید انواع اطلاع رسانی جدید را بدون تغییر کد موجود اضافه کنید، که به اصل باز بسته طراحی نرم افزار متصل می شود.