Skip to content

Commit

Permalink
Add Mediator to website
Browse files Browse the repository at this point in the history
  • Loading branch information
nguyenphuc22 committed Dec 4, 2023
1 parent b6b9eb5 commit c25740d
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 21 deletions.
40 changes: 19 additions & 21 deletions .idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Writerside/hi.tree
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,6 @@
</toc-element>
<toc-element topic="Command.md"/>
<toc-element topic="Iterator.md"/>
<toc-element topic="Mediator.md"/>
</toc-element>
</instance-profile>
69 changes: 69 additions & 0 deletions Writerside/topics/Mediator.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Mediator

## Giới thiệu

Mediator Pattern định nghĩa một đối tượng trung gian (mediator) để điều phối tương tác giữa các đối tượng, làm giảm sự phụ thuộc trực tiếp giữa chúng.

## Định nghĩa

Mediator Pattern định nghĩa một đối tượng Mediator đóng vai trò trung gian điều phối giao tiếp giữa các đối tượng, tránh cho chúng phải giao tiếp trực tiếp với nhau.

## Mục đích

- Giảm sự phụ thuộc trực tiếp giữa các đối tượng

- Tách biệt cách các đối tượng giao tiếp với nhau

- Dễ dàng mở rộng và thay đổi cách giao tiếp giữa các lớp

## Đặt vấn đề

Giả sử bạn đang phát triển một ứng dụng nhắn tin với các đối tượng User và ChatRoom. Ban đầu, mỗi User giao tiếp trực tiếp với ChatRoom để gửi tin nhắn.

Sau này, yêu cầu thay đổi là cần kiểm duyệt tin nhắn trước khi gửi đi. Lúc này, mối phụ thuộc trực tiếp giữa các đối tượng dẫn tới khó khăn trong việc thay đổi.

## Giải quyết

Mediator Pattern được áp dụng như sau:

- Định nghĩa một lớp Mediator đóng vai trò trung gian điều phối giữa các User và ChatRoom.

- Các User và ChatRoom không giao tiếp trực tiếp với nhau nữa mà thông qua Mediator.

- Khi có yêu cầu thay đổi, ta chỉ cần sửa đổi bên trong Mediator mà không ảnh hưởng các User và ChatRoom.

![](https://refactoring.guru/images/patterns/diagrams/mediator/structure.png)

## Cấu trúc

Các thành phần chính trong Mediator Pattern:

- Mediator: định nghĩa interface để giao tiếp với các Colleague.

- Colleague: giao tiếp với mediator thay vì giao tiếp trực tiếp với các Colleague khác.

- ConcreteMediator: triển khaiMediator để điều phối các Colleague.

- ConcreteColleague: các lớp cụ thể tương tác với mediator.

## Cách triển khai

Để triển khai Mediator Pattern trong Java, chúng ta có thể:

- Định nghĩa interface Mediator với các phương thức trung gian.

- Các lớp Colleague sẽ giữ một tham chiếu tới Mediator và gọi các phương thức đó thay vì giao tiếp trực tiếp.

- Lớp ConcreteMediator sẽ triển khai và điều phối các interation giữa các Colleague.

## Ví dụ

// Ví dụ triển khai Mediator Pattern với các lớp ChatRoom, User

## So sánh

So với Observer, Mediator tập trung vào việc điều phối giao tiếp giữa các đối tượng, còn Observer tập trung vào mối quan hệ một-nhiều giữa các đối tượng.

## Kết luận

Mediator Pattern hữu ích để giảm sự phụ thuộc trực tiếp giữa các lớp, dễ dàng mở rộng và thay đổi chương trình. Tuy nhiên cũng cần tránh lạm dụng mediator dẫn tới phức tạp hóa code.

0 comments on commit c25740d

Please sign in to comment.