Khái niệm:
Định nghĩa một sự phụ thuộc 1-nhiều giữa các đối tượng để khi một đối tượng thay đổi trạng thái, tất cả phụ thuộc của nó được thông báo và cập nhật một cách tự động
Mức độ sử dụng: cao
UML Class Diagram
Những lớp và/hoặc đối tượng trong mẫu thiết kế này:
- Subject (Stock):
+ biết các observer của nó. Bất kì đối tượng Observer nào cũng có thể quan sát chủ thế của nó.
+ cung cấp một interface để đính kèm và gỡ đính kèm các đối tượng Observer.
- ConcreteSubject (IBM):
+ lưu trữ trạng thái mối quan tâm vào ConcreteObserver
+ gửi một thông báo đến các observer của nó khi nó thay đổi trạng thái
- Observer (IInvestor): định nghĩa một interface đang cập nhật cho các đối tượng nên được thông báo khi có thay đổi trong một subject.
- ConcreteObserver (Investor):
+ bảo trì một tham chiếu đến một đối tượng ConcreteSubject
+ lưu trữ trạng thái luôn nhất quán với trạng thái của subject
+ thực thi interface cập nhật của Observer để giữ trạng thái của nó đồng nhất với trạng thái của subject
Observer: khi nào sử dụng và sử dụng ở đâu
Observer là một trong hai mẫu thiết kế của Gang-of-Four (mẫu thiết kế khác là Iterator) được dùng không chỉ trong các thư viện .NET framework, mà còn trong bản thân các ngôn ngữ .NET. Khi lập trình một ứng dụng Web hoặc một ứng dụng Windows, bạn thường làm việc với các event và event handler. Các event và Delegate,, hoạt động như Subject và các Observer như được định nghĩa một cách tương ứng trong mẫu thiết kế Observer.
Mẫu thiết kế Observer là cơ sở cho các thiết kế hướng đối tượng tốt vì nó hỗ trợ kiểu loose coupling. Các observer đăng kí và gỡ đăng kí bản thân chúng cũng các subject duy trì một danh sách các observer được quan tâm. Subject này không phụ thuộc vào bất kì observer riêng biệt nào miễn là các delegate là của đúng kiểu dành cho event đó.
Demo