Observer là gì

Hôm rồi có đứa em đi bỏng vấn, câu hỏi về ObVPS Pattern. Không tất cả gì nhằm nói giả dụ tới cái “main content” của pattern này nó cũng ko nỗ lực được. BỨC XÚC QUÁ!

Ngồi viết bài bác này chia sẻ với các “chỏng vị đồng môn”. Thứ tốt nhất là về Observer pattern, nhị nữa là giải pháp học một pattern, áp dụng trong thực tiễn. Một số ông vừa new suy nghĩ tới Design Pattern thôi sẽ toát những giọt mồ hôi hột, đi chất vấn được đặt câu hỏi thắc mắc về Design Pattern run cố gắng cập, trả lời ú ớ.

You watching: Observer là gì


*
*
*
*
Đây, như loại xây cất của thành thị tương lai. Mọi vật dụng hướng về trung trọng tâm – buộc phải mới điện thoại tư vấn là Nhất trụ kình thiênNguồn hình họa / Source: resourcebasedeconomy.org

Cũng là Behavior Pattern, nói tới là nhớ tức thì dòng pattern kia làm cho gì?, nổi bật là cái Iterator Pattern – Đôi điều trúc vị từ Kieblog. Nhìn mẫu chữ Iterator thôi là nhớ dòng main content là loop, loại pattern này chắc hẳn rằng thiết kế ra để hỗ tnhóc con chiếc vấn đề loop.

Đấy, chỉ cần ghi nhớ cái concept vậy thôi là chả lúc nào sợ hãi quên kiến thiết pattern.

2. Định nghĩa về Observer pattern

Nhớ mãi luôn nhớ cái thương hiệu pattern rồi. Giờ lấn sân vào detail, chứ đọng nhớ ko vậy thì cũng không ổn. Phải nắm rõ 2 thứ:

Lúc làm sao sử dụng?, áp dụng như vậy nào?Điểm bạo dạn, điểm yếu

Obhệ thống Pattern là dạng pattern hành vi (Behavior Pattern). Định nghĩa:

Observer is a behavioral thiết kế pattern that lets you define a subscription mechanism lớn notify multiple objects about any events that happen khổng lồ the object they’re observing.

ObVPS là pattern hành động, góp bọn họ khẳng định bề ngoài đăng kí để thông tin tới các object về bất kể sự kiện như thế nào xảy ra với đối tượng người sử dụng cơ mà chúng sẽ đăng kí

ngoài ra, bởi là Behavior Pattern buộc phải Obhệ thống là quan hệ one lớn many relationship. Một ông ở giữa trụ, một trụ chống trời!

2.1 Bài toán thù thực tế

Bài tân oán thực tiễn. Có 10 fan vào một khu vực dân cđọng mong muốn mua iPhone 12 ở shop trung tâm khu cư dân.

See more: Công Nghệ Electroporation Là Gì ? Giúp Đưa Dưỡng Chất Sâu Bên Trong Da

Nếu shop không tồn tại vẻ ngoài gì thông báo qua phone, qua mail, mỗi người đang tới hỏi siêu thị một vài lần. Câu trả lời là có, chưa tồn tại, có chưa xuất hiện. Không ổn!

Nếu siêu thị gửi thông báo mang đến tất cả 10 fan về vấn đề có iPhone mới?. Ổn, nhưng gửi thông tin iPhone 11 cho tất cả 10 người thì bạn ta chửi sml. Ông X nhiều tổ bố, nên có thể yêu thích 12, 11 đ’ đủ tuổi. Ông Y chị em chào bán vàng, gia cảnh nghèo hơn, chỉ thích hợp 8 Plus, nên thông báo về 12 ổng cũng la bm.

Từ bài xích tân oán thực tiễn này (chỉm cố kỉnh chứ đọng méo biết có bắt buộc không), Obhệ thống Pattern thành lập và hoạt động. Chỉ gửi notification cho những người đăng kí quan lại cạnh bên đối tượng người sử dụng (Objects) đó, bên cạnh đó không gửi, không có giờ spam.

2.2 Hiện thực ý tưởng

Đã bao gồm ý tưởng nỗ lực, pattern này chia thành nhị thành phần chủ yếu là Publisher và Subscribers

Publisher: thống trị sự kiện mới (tất cả notifi, bao gồm object mới). Sẽ publish đọc tin đó ra mang lại subscribler.Subscribers: ông này thì dễ hiểu rồi, nhỏng subscribers Youtube (ấn chuông), bao giờ có video mới thì nó phun notification lên. Chuẩn bài xích dễ dàng hiểu!

Chi máu rộng nha.

See more: Selinux Là Gì - Cách Vô Hiệu Hóa Selinux Trên Centos

Trước tiên, thằng Publisher. Trong ObVPS Pattern thì thằng Thằng này còn có 3 method: đăng kí (subscribe), quăng quật đăng kí (unsubscribe) cùng thông báo (notify).


// Source code: refactoring.guru - observer patternpublic class EventManager Map> listeners = new HashMap();public EventManager(String... operations) for (String operation : operations) this.listeners.put(operation, new ArrayList());public void subscribe(String eventType, EventListener listener) List users = listeners.get(eventType);users.add(listener);public void unsubscribe(String eventType, EventListener listener) List users = listeners.get(eventType);users.remove(listener);public void notify(String eventType, File file) List users = listeners.get(eventType);for (EventListener listener : users) listener.update(eventType, file);

Chuyên mục: Giải Đáp