banner
Aug 1, 2023
114 Views

Observer pattern

Written by
banner

Trong thiết kế và kỹ thuật phần mềm, mẫu thiết kế quan sát viên (Observer pattern) là một mẫu thiết kế phần mềm mà trong đó một đối tượng, gọi là chủ thể (subject), duy trì một danh sách các đối tượng phụ thuộc của nó, được gọi là các quan sát viên (observers), và tự động thông báo cho họ về bất kỳ thay đổi trạng thái nào, thường bằng cách gọi một trong các phương thức của chúng.

In software design and engineering, the observer pattern is a software design pattern in which an object, named the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes, usually by calling one of their methods.

Ví dụ: giả sử bạn đang xây dựng một hệ thống thông báo cho các người đăng ký nhận tin tức. Khi có tin tức mới, hệ thống sẽ thông báo tự động đến tất cả các người đăng ký đã quan tâm đến loại tin tức đó. Trong trường hợp này, chủ thể (Subject) là hệ thống thông báo, và các quan sát viên (Observers) là các người đăng ký.

# Tạo lớp chủ thể (Subject)
class NewsSystem:
    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, news):
        for subscriber in self._subscribers:
            subscriber.update(news)

# Tạo lớp quan sát viên (Observer)
class Subscriber:
    def __init__(self, name):
        self._name = name

    def update(self, news):
        print(f"{self._name} received news: {news}")

# Sử dụng mẫu thiết kế quan sát viên
if __name__ == "__main__":
    news_system = NewsSystem()

    # Tạo các người đăng ký
    subscriber1 = Subscriber("John")
    subscriber2 = Subscriber("Alice")

    # Đăng ký các người đăng ký vào hệ thống thông báo
    news_system.subscribe(subscriber1)
    news_system.subscribe(subscriber2)

    # Tạo tin tức mới và thông báo cho tất cả các người đăng ký
    latest_news = "COVID-19 restrictions have been lifted."
    news_system.notify_subscribers(latest_news)

    # Kết quả dự kiến: John received news: COVID-19 restrictions have been lifted.
    #                Alice received news: COVID-19 restrictions have been lifted.

    # Hủy đăng ký một người đăng ký
    news_system.unsubscribe(subscriber1)

    # Tạo tin tức mới và thông báo cho tất cả các người đăng ký còn lại
    latest_news = "New technology breakthrough announced."
    news_system.notify_subscribers(latest_news)

    # Kết quả dự kiến: Alice received news: New technology breakthrough announced.
Article Categories:
dev
banner

Leave a Reply

Your email address will not be published. Required fields are marked *