[Design Pattern] Observer/ Event Listener

2 min read

Observer là một design pattern cho phép bạn xác định cơ chế subscription.

Mục đích

Observer là một design pattern cho phép bạn xác định cơ chế subscription. Pattern này thông báo cho đối tượng khác về các sự kiển xảy ra trong một đối tượng.

Bài toán

Hãy tưởng tượng rằng bạn có hai loại đối tượng: Khách hàng và Cửa hàng. Khách hàng rất quan tâm đến một thương hiệu sản phẩm cụ thể sẽ sớm có mặt tại cửa hàng.

Tuy nhiên, khách hàng phải thăm cửa hàng mỗi ngày và kiểm tra tình trạng còn hàng của sản phẩm. Trong khi sản phẩm vẫn đang trên đường vận chuyển thì hầu hết những chuyến đi này đều vô nghĩa.

Giải pháp

Đối tượng có một số trạng thái thú vị thường được gọi là chủ đề. Lớp này có thể gọi là publisher. Tất cả các đối tượng khác muốn theo dõi các thay đổi về trạng thái của publisher được gọi là subcriber.

Đồng thời, ta cần thêm cơ chế đăng ký vào lớp publisher để các đối tượng riêng lẻ có thể đăng ký hoặc hủy đăng ký luồng sự kiện đến từ publisher đó.

Giờ đây, bất cứ khi nào một sự kiện quan trọng xảy ra với publisher, nó sẽ chuyển đến các subscriber và gọi phương thức thông báo cụ thể trên đối tượng của chúng.

Ứng dụng

Nếu ứng dụng của bạn có nhiều loại publisher khác nhau và bạn muốn làm cho subscriber của mình tương thích với tất cả các loại publisher đó. Ngoài ra, bạn có thể tiến xa hơn nữa và làm cho tất cả các publisher tuân theo cùng một giao diện.

Giao diện này chỉ cần mô tả một số phương thức đăng ký. Giao diện sẽ cho phép subscriber quan sát trạng thái của publisher mà không cần kết hợp với các lớp cụ thể của họ.

Cấu trúc

Ưu nhược điểm

Ưu điểm

  • Nguyên tắc đóng/mở. Bạn có thể giới thiệu các lớp subcriber mới mà không cần phải thay đổi code của publisher.
  • Bạn có thể thiết lập mối quan hệ giữa các đối tượng trong thời gian chạy.

Nhược điểm

  • Các subscriber được thông báo theo thứ tự ngẫu nhiên.

Original article: https://refactoring.guru/design-patterns/observer

Avatar photo

Clean Code: Nguyên tắc viết hàm trong lập trình…

Trong quá trình phát triển phần mềm, việc viết mã nguồn dễ đọc, dễ hiểu là yếu tố then chốt để đảm bảo code...
Avatar photo Dat Tran Thanh
3 min read

Clean Code: Nguyên tắc đặt tên (Naming)

Clean Code là việc viết mã nguồn rõ ràng, dễ hiểu, dễ bảo trì. Bài viết này sẽ giới thiệu nguyên tắc đầu tiên...
Avatar photo Dat Tran Thanh
4 min read

Leave a Reply

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