Observer Là Gì

  -  

Ý Đồ

Observer là 1 trong những behavioral thiết kế pattern (sau đây gọi tắt là DP) dùng để làm định nghĩa một cơ chế đăng ký (subscribe) nhằm mục tiêu thông báo (notify) mang lại nhiều đối tượng người sử dụng về các sự kiện xẩy ra với đối tượng người sử dụng mà bọn chúng đang quan cạnh bên (observe).

Bạn đang xem: Observer là gì

*

Vấn đề

Tưởng tượng rằng các bạn có hai loại đối tượng: quý khách hàng và cửa hàng. Quý khách rất suy nghĩ một thương hiệu sản phẩm rõ ràng (giả sử là một trong những mẫu iPhone mới) sẵn sàng được bày buôn bán tại cửa hàng.

Khách hàng rất có thể ghé thăm siêu thị mỗi ngày để kiểm soát đã có thành phầm chưa. Tuy vậy trong khi sản phẩm vẫn không được tung ra, hầu như những chuyến du ngoạn tới shop này đang là vô nghĩa.

*

Mặt khác, cửa hàng rất có thể gửi sản phẩm tấn email (mà đã có quý khách hàng nghĩ là thư rác) mang lại tất cả quý khách mỗi khi có sản phẩm mới. Điều này để giúp một số quý khách hàng đỡ đề nghị mất công đến cửa hàng vô số lần, tuy nhiên, đồng thời, điều đó sẽ làm khó tính những quý khách khác không suy xét sản phẩm mới.

Có vẻ như bao gồm một sự xung đột xẩy ra ở đây. Hoặc là người sử dụng lãng phí thời gian kiểm tra xem thành phầm đã bao gồm hàng giỏi chưa, hoặc là cửa hàng lãng phí nguồn lực khi thông báo cho quý khách hàng không mong muốn nhận thông báo.

Giải pháp

Đối tượng cơ mà có một số trạng thái mà đối tượng khác thân yêu thường được hotline là subject, nhưng do nó cũng sẽ thông báo đến các đối tượng người tiêu dùng khác về những chuyển đổi đối với tâm lý của nó, cửa hàng chúng tôi sẽ call nó là publisher. Toàn bộ các đối tượng khác mong mỏi theo dõi các chuyển đổi đối với tinh thần của publisher được điện thoại tư vấn là subscribers.

Observer DP gợi nhắc rằng chúng ta nên thêm lý lẽ subscribe vào class quảng cáo trên internet để các đối tượng người dùng riêng lẻ hoàn toàn có thể subscribe hoặc bỏ subscribe ngoài luồng sự kiện tới từ publisher đó. Nghe dường như phức tạp, nhưng thực tế sẽ đơn giản hơn chúng ta nghĩ đấy

*

Giờ đây, bất cứ lúc nào một sự kiện quan trọng xảy ra cùng với publisher, publisher sẽ chạy qua mảng subscriber cùng gọi cách thức thông báo ví dụ của các đối tượng người tiêu dùng ấy.

Các ứng dụng thực hoàn toàn có thể có hàng chục class subscriber khác nhau cân nhắc việc theo dõi các sự khiếu nại của cùng một class publisher. Trong trường thích hợp này, chúng ta không buộc phải couple quảng cáo online vào tất cả các class đó. Bên cạnh đó, bạn có thể thậm chí chần chờ trước về một vài trong số hầu như class kia nếu class publisher của chúng ta viết ra với mục tiêu được tín đồ khác sử dụng.

Đó là nguyên nhân tại sao điều quan trọng là tất cả các subscriber đề xuất implement thuộc một hình ảnh và publisher chỉ giao tiếp với các subscriber qua đồ họa đó. Giao diện này đề xuất khai báo phương thức thông tin cùng với cùng một tập hợp những tham số nhưng mà publisher có thể sử dụng để chuyển một vài dữ liệu theo ngữ cảnh với thông báo.

*

Nếu ứng dụng của bạn có nhiều loại publisher khác biệt và bạn có nhu cầu làm cho subscriber tương xứng với tất cả các publisher, chúng ta cũng có thể làm cho toàn bộ các publisher follow và một giao diện. Hình ảnh này chỉ cần mô tả một số cách thức subscribe. đồ họa sẽ được cho phép subscriber quan liền kề trạng thái của advertiser mà không couple đến những class cụ thể của publisher.

Ví von cùng với thực tế

*

Nếu bạn subscribe một tờ báo hoặc tạp chí, bạn không cần thiết phải đến shop để bình chọn xem số tiếp theo đã gồm hay không. Gắng vào đó, nhà xuất bản sẽ gửi các số báo mới trực kế tiếp hộp thư của công ty ngay sau thời điểm xuất phiên bản hoặc thậm chí trước.

Xem thêm: Các Khách Sạn 5 Sao Thành Phố Vũng Tàu Được Giới Trẻ Check In 'Rần Rần'

Nhà xuất bản giữ danh sách những người dân đăng ký và biết họ xem xét tạp chí nào. Tín đồ đăng ký có thể rời ngoài danh sách ngẫu nhiên lúc nào lúc họ không muốn nhà xuất bạn dạng gửi những số tạp chí new cho bọn họ nữa.

Cấu trúc

*

Publisher bắn các sự kiện mà lại các đối tượng khác quan tiền tâm. Gần như sự kiện này xẩy ra khi publisher chuyển đổi trạng thái hoặc thực hiện một vài hành vi. Publisher có cơ chế subscribe được cho phép đối tượng ra/vào danh sách subscriber.

Khi một sự kiện new xảy ra, quảng cáo trên internet duyệt qua danh sách subscriber và call phương thức thông báo được khai báo trong bối cảnh subscriber của từng đối tượng subscriber.

Giao diện Subscriber khai báo hình ảnh thông báo. Trong phần lớn các trường hợp, nó bao hàm chỉ một thủ tục là update. Phương thức rất có thể có một vài tham số được cho phép publisher pass một số chi tiết sự khiếu nại cùng với việc kiện cập nhật.

Class Subscriber rõ ràng thực hiện nay một số hành động để ý kiến lại các thông báo do publisher đưa ra. Tất cả các lớp này phải implement thuộc một bối cảnh để publisher không phải couple với những class rứa thể.

Thông thường, subscriber cần một vài thông tin theo văn cảnh để giải pháp xử lý sự kiện update một cách thiết yếu xác. Vì lý do này, advertiser thường chuyển một số trong những dữ liệu ngữ cảnh có tác dụng param của phương thức thông báo. Publisher có thể pass chủ yếu nó như một param, chất nhận được subscriber thẳng fetch ngẫu nhiên dữ liệu nào nhưng mà nó cần.

Client sinh sản các đối tượng người dùng publisher cùng subscriber lẻ tẻ và tiếp đến subscribe subscriber vào advertiser để lắng tai các cập nhật của publisher.

Giả mã

Danh sách subscriber được biên dịch động: Các đối tượng người dùng có thể bắt đầu hoặc ngừng nghe thông báo tại runtime, tùy thuộc vào hành vi ước muốn của áp dụng của bạn.

Trong cách thực thi này, class editor không tự lưu list subscribe. Nó ủy thác công việc này cho đối tượng người tiêu dùng helper đặc biệt dành riêng biệt cho vấn đề đó. Bạn cũng có thể nâng cấp đối tượng người tiêu dùng đó để đổi mới nó thành một event dispatcher tập trung, đến phép ngẫu nhiên đối tượng nào vận động như một publisher.

Xem thêm: Hang Tối Ở Quảng Bình 2023, Tour Sông Chày Hang Tối 1 Ngày

Việc thêm subscriber new vào chương trình không yêu thương cầu thay đổi đối với các lớp quảng cáo online hiện có, miễn sao chúng chuyển động với toàn bộ subscriber trải qua cùng một giao diện.