You are on page 1of 30

OBSERVER

PATTERN
1.Giới thiệu
INDEX.HTML
Observer Pattern là một mẫu thiết kế thuộc nhóm Behavioral Pattern
 Định nghĩa mối phụ thuộc một - nhiều giữa các đối tượng để khi mà một
đối tượng có sự thay đổi trạng thái, tất các thành phần phụ thuộc của nó sẽ
được thông báo và cập nhật một cách tự động.
 Một đối tượng có thể thông báo đến một số lượng không giới hạn các đối
tượng khác..

INDEX.HTML
/02
Cách hoạt động
của Observer
Pattern

INDEX.HTML
/Bước
1:
Trong bước 1, ba
người quan sát
(Observer) đang yêu
cầu nhận thông báo
từ một đối tượng
(Subject).

EXAMPLE.HTM
L
/Bước
2:
Trong bước 2, chủ
thể (Subject) có thể
cấp các yêu cầu; nói
cách khác, một kết
nối được thiết lập.

EXAMPLE.HTM
L
/Bước
3:
Trong bước 3, chủ
thể (Subject) sẽ gửi
thông báo đến người
dùng đã đăng ký .

EXAMPLE.HTM
L
/Bước
4:
Trong bước 4 (tùy chọn),
Observer2 không muốn
nhận thêm thông báo và
yêu cầu hủy đăng ký bản
thân hoặc chủ thể
(Subject) không muốn
giữ Observer2 trong
danh sách thông báo do
một số lý do cụ thể và
anh ấy hủy đăng ký
Observer2. Vì vậy, mối
liên hệ giữa Subject và
người quan Observer2 đã
bị phá vỡ.
EXAMPLE.HTM
L
/Bước
5:
Trong bước 5, kể từ bây
giờ, chỉ Observer1 và
Observer3 nhận được
thông báo từ chủ thể

EXAMPLE.HTM
L
3.Kiến
trúc
INDEX.HTML
INDEX.HTML
YOUR LOGO
HERE

Các thành phần trong mô hình:


 Publisher (subject) là lớp cần lắng nghe. Khi có sự kiện, Publisher sẽ thông
báo cho Subscriber (observer).
 Subscriber là interface để Publisher báo cáo mỗi khi có sự kiện.
 ConcreteSubscriber (SubscriberA,B...) cài đặt cụ thể hành động lớp
cần làm khi nhận sự kiện của Publisher.
 Client là người sử dụng Observer.

INDEX.HTML
YOUR LOGO
HERE

/ Ưu & nhược


điểm

INDEX.HTML
YOUR LOGO
HERE

/ƯU ĐIỂM

• Đảm bảo nguyên tắc Open/Closed Principle (OCP): Cho phép thay đổi Subject và
Observer một cách độc lập. Chúng ta có thể tái sử dụng các Subject mà không cần tái sử
dụng các Observer và ngược lại. Nó cho phép thêm Observer mà không sửa đổi Subject
hoặc Observer khác.
• Thiết lập mối quan hệ giữa các objects trong thời gian chạy.
• Sự thay đổi trạng thái ở 1 đối tượng có thể được thông báo đến các đối tượng khác mà
không phải giữ chúng liên kết quá chặt chẽ.
• Không giới hạn số lượng Observer.

INDEX.HTML
YOUR LOGO
HERE

/NHƯỢC
ĐIỂM
• Unexpected update: Bởi vì các Observer
không biết về sự hiện diện của nhau, nó
có thể gây tốn nhiều chi phí của việc thay
đổi Subject.
• Subscriber được thông báo theo thứ tự
ngẫu nhiên.

INDEX.HTML
YOUR LOGO
HERE

/5 KHI NÀO NÊN SỬ DỤNG


Sử dụng Observer Patern khi chúng ta muốn:
 Sự thay đổi trạng thái ở 1 đối tượng cần được thông báo đến các đối tượng khác mà
không phải giữ chúng liên kết quá chặt chẽ.
 Cần mở rộng dự án với ít sự thay đổi nhất.
 Khi abstraction có 2 khía cạnh, cái này phụ thuộc cái kia. Đóng gói các khía cạnh
này trong các đối tượng khác nhau cho phép bạn thay đổi và tái sử dụng chúng độc
lập.
 Khi thay đổi một đối tượng yêu cầu việc thay đổi đến các đối tượng khác, và bạn
không biết số lượng đối tượng cần thay đổi.
 Khi một đối tượng thông báo các đối tượng khác mà không cần biết đối tượng đó là
gì hay nói cách khác là tránh tightly coupled.

INDEX.HTML
TEMPLATE
METHOD
PATTERN
1. Định nghĩa của GOF
• Xác định khung của một thuật toán trong một hoạt động, trì hoãn
một số bước đối với các lớp con.
• Phương pháp mẫu cho phép các lớp con xác định lại các bước
nhất định của thuật toán mà không thay đổi cấu trúc của thuật
toán.
2. Sơ đồ UML
AbstractClass chứa
templateMethod () nên
được tạo cuối cùng để
không thể ghi đè. Phương
pháp mẫu này sử dụng các
thao tác khác có sẵn để
chạy thuật toán nhưng
được tách riêng để triển
khai thực tế các phương
pháp này.  
2. Sơ đồ UML
Tất cả các hoạt động
được sử dụng bởi phương
thức khuôn mẫu này được
thực hiện trừu tượng, vì vậy
việc triển khai của chúng
được chuyển sang các lớp
con.
Đơn giản, mẫu thiết kế
này hữu ích khi bạn triển
khai thuật toán nhiều bước
nhưng cho phép tùy chỉnh
thông qua các lớp con.
3. Ý tưởng

● Sử dụng mẫu này, bạn bắt đầu với cấu trúc tối thiểu hoặc thiết
yếu của một thuật toán.
● Sau đó, ta trì hoãn một số trách nhiệm đối với các lớp con. Kết
quả là, lớp dẫn xuất có thể xác định lại một số bước của thuật
toán mà không làm thay đổi quy trình của thuật toán.
● Đơn giản, mẫu thiết kế này hữu ích khi bạn triển khai thuật
toán nhiều bước nhưng cho phép tùy chỉnh thông qua các lớp
con.
YOUR LOGO
HERE

4. Ví dụ thực tế

INDEX.HTML
5. Thuật ngữ máy tính
●Giả sử rằng bạn đã được thuê để thiết kế một khóa học cấp bằng
kỹ sư trực tuyến. Bạn biết rằng, nói chung, học kỳ đầu tiên của khóa
học là như nhau đối với tất cả các khóa học. Đối với các học kỳ tiếp
theo, bạn cần thêm các bài báo hoặc môn học mới vào đơn đăng ký
dựa trên khóa học mà sinh viên đã chọn.
●Mẫu Phương pháp mẫu có ý nghĩa khi bạn muốn tránh mã trùng
lặp trong ứng dụng của mình nhưng cho phép các lớp con thay đổi
một số chi tiết cụ thể của quy trình làm việc của lớp cơ sở để mang lại
các hành vi khác nhau cho ứng dụng. (Tuy nhiên, bạn có thể không
muốn ghi đè hoàn toàn các phương thức cơ sở để thực hiện các thay
đổi căn bản trong các lớp con. Bằng cách này, mẫu khác với đa hình
đơn giản.)
6. Thực hiện (Implementation)
YOUR LOGO
HERE

7. Class diagram

INDEX.HTML
YOUR LOGO
HERE

8. SOLUTION EXPLOERER VIEW

INDEX.HTML
YOUR LOGO
HERE

9. Ưu điểm của mẫu Phương pháp Mẫu

Không trùng lặp mã


1

2 Mã có thể sử dụng lại

Dễ thực hiện và dễ đọc 3

INDEX.HTML
YOUR LOGO
HERE

9. Ưu điểm của mẫu Phương pháp Mẫu

Linh hoạt
4
Thiết kế được xác định
5 rõ ràng (tránh mơ hồ)

Kiến trúc sạch sẽ 6


Ít tác động của những
7 thay đổi

INDEX.HTML
YOUR LOGO
HERE

10. Nhược điểm của mẫu Phương pháp


Mẫu

1 Có thể vi phạm Nguyên tắc thay thế SOLID Liskov

2 Thực thi một thiết kế cụ thể

3 Vấn đề bảo trì

INDEX.HTML
YOUR LOGO
HERE

11. Khi nào nên sử dụng


- Để các lớp con thực hiện các hành vi khác nhau (thông qua ghi
đè phương thức)
- Tránh trùng lặp trong mã, cấu trúc dòng công việc chung được
thực hiện một lần trong thuật toán của lớp trừu tượng và các biến
thể cần thiết được thực hiện trong các lớp con.
- Kiểm soát những điểm nào được phép phân lớp con. Trái ngược
với ghi đè đa hình đơn giản, trong đó phương thức cơ sở sẽ được
viết lại hoàn toàn cho phép thay đổi triệt để quy trình làm việc, chỉ
các chi tiết cụ thể của quy trình làm việc mới được phép thay đổi.
INDEX.HTML

You might also like