-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local

Hoà giải mọi tranh luận
Chắc hẳn mọi người ở đây ai cũng đã và đang sử dụng ứng dụng chat rồi nhỉ? Câu hỏi đặt ra là làm thế nào để chúng ta có thể chat được với nhau? Nó không chỉ đơn giản là việc chúng ta soạn một tin nhắn và gửi đến người kia, đằng sau đó là cả một hệ thống server phức tạp để lưu trữ và điều hướng các message của chúng ta đến đúng với người nhận. Tuy phức tạp như vậy nhưng nó lại được xây dựng trên một designpattern khá gọn nhẹ đó là mediator pattern
Mục tiêu ra đời
- Định nghĩa ra một đối tượng đóng gói hay quy định cách mà các đối tượng sẽ tương tác với nhau: ví dụ khi một server (mediator) nhận được một message thì message đó phải có người nhận, và server sẽ gửi message này đến đúng người nhận đó
- Tạo ra thiết kế mềm dẻo và dễ mở rộng bằng cách loại bỏ việc tham chiếu lẫn nhau: ví dụ A gửi message đến B thì A không cần phải biết đến B và B cũng vậy không cần phải biết đến A.
Ví dụ
Trước khi có Mediator, để A gửi nhận được message với B, code sẽ kiểu thế này:
class A {
private B b;
void send(String mesage) {
b.received(message);
}
void received(String message) {
print(message);
}
}
class B {
private A a;
void send(String mesage) {
a.received(message, a);
}
void received(String message) {
print(message);
}
}
Nhìn code sẽ rất rồi bị duplicate nhiều, và trong trường hợp cần gửi nhận sẽ hàng nghìn hàng triệu user thì mọi thứ sẽ trở nên mất kiểm soát. Khi có Mediator, mọi thứ sẽ đơn giản hơn rất nhiều.
public class NetworkUser implements User {
public void sendMessage(String message, String to) {
print(name + " sent to: " + to + " message: " + message);
chatRoom.sendMessage(message, name, to);
}
public void onMessageReceived(String message, String from) {
print(name + " received from: " + from + " message: " + message);
}
}
public static class ChatRoom {
public void sendMessage(String message, String from, String to) {
User toUser = users.get(to);
toUser.onMessageReceived(message, from);
}
}
Tổng kết
Mediator là một design pattern rất quan trọng, được sử dụng rộng rãi từ server cho đến client, nó giúp loại bỏ việc liên kết chặt chẽ giữa các lớp với nhau từ đó cho phép chúng ta dễ dàng mở rộng hệ thống của mình.
Tham khảo
-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local