× Giới thiệu Lịch khai giảng Tin tức Sản phẩm học viên

Mediator Pattern Là Gì? Tìm Hiểu Về Mediator Design Pattern

12/11/2024 04:26

Mediator Pattern là gì? Mediator Pattern, còn gọi là "Mẫu thiết kế trung gian", được sử dụng để xử lý và quản lý giao tiếp giữa các đối tượng. Thay vì các đối tượng giao tiếp trực tiếp

Trong lập trình hướng đối tượng, Mediator Pattern là một trong những mẫu thiết kế phổ biến thuộc nhóm Behavioral Patterns. Mục tiêu chính của Mediator là giảm thiểu sự phụ thuộc trực tiếp giữa các thành phần, đối tượng trong hệ thống, giúp chúng tương tác thông qua một đối tượng trung gian – chính là Mediator. Điều này mang lại sự linh hoạt, dễ bảo trì và mở rộng mã nguồn, đặc biệt là trong các ứng dụng phức tạp.

1. Mediator Pattern Là Gì?

Mediator Pattern, còn gọi là "Mẫu thiết kế trung gian", được sử dụng để xử lý và quản lý giao tiếp giữa các đối tượng. Thay vì các đối tượng giao tiếp trực tiếp, chúng sẽ tương tác thông qua một đối tượng trung gian (Mediator), từ đó giảm thiểu sự phụ thuộc trực tiếp giữa chúng.

  • Lợi ích chính: Mediator giúp giảm sự phụ thuộc và tối ưu hóa giao tiếp trong hệ thống. Khi có thay đổi trong một thành phần, bạn chỉ cần điều chỉnh Mediator mà không ảnh hưởng đến các thành phần khác. 

2. Tại Sao Mediator Pattern Quan Trọng?

Mediator Pattern đặc biệt hữu ích trong các hệ thống phức tạp, nơi có nhiều đối tượng cần giao tiếp qua lại với nhau. Một số lý do Mediator trở nên quan trọng bao gồm:

  1. Giảm sự phụ thuộc giữa các thành phần: Các đối tượng không cần biết chi tiết của nhau, thay vào đó chỉ cần giao tiếp với Mediator.
  2. Tăng tính linh hoạt và khả năng mở rộng: Với Mediator, việc thêm hoặc sửa đổi các đối tượng dễ dàng hơn mà không ảnh hưởng đến toàn bộ hệ thống.
  3. Cải thiện khả năng bảo trì: Giảm sự kết nối lẫn nhau giúp mã nguồn dễ hiểu và bảo trì hơn, đặc biệt là trong các dự án dài hạn.

3. Các Thành Phần Trong Mediator Pattern

Mediator Pattern bao gồm các thành phần chính sau:

  1. Mediator (Đối tượng trung gian): Định nghĩa các phương thức để các đối tượng giao tiếp với nhau.
  2. Concrete Mediator (Đối tượng trung gian cụ thể): Thực thi các phương thức giao tiếp được định nghĩa trong Mediator, chịu trách nhiệm quản lý và điều phối các đối tượng.
  3. Colleagues (Các đối tượng giao tiếp): Là các đối tượng cần giao tiếp với nhau, nhưng không giao tiếp trực tiếp mà thông qua Mediator.

Đọc thêm: Hướng Đối Tượng Là Gì? Tất Cả Những Điều Nên Hiểu Về Hướng Đối Tượng Trong Java

4. Cách Hoạt Động Của Mediator Pattern

Để hiểu rõ hơn, hãy xem qua ví dụ về một ứng dụng chat nhóm:

  • Trong một ứng dụng chat nhóm, mỗi người dùng có thể gửi tin nhắn đến tất cả thành viên trong nhóm.
  • Thay vì mỗi người dùng cần lưu trữ thông tin về tất cả người dùng khác, một ChatRoom (Mediator) sẽ thực hiện nhiệm vụ điều phối.
  • Khi người dùng gửi tin nhắn, ChatRoom sẽ phân phối tin nhắn này tới tất cả các thành viên, giúp hệ thống linh hoạt và dễ quản lý hơn.

5. Ưu Điểm Và Nhược Điểm Của Mediator Pattern

Ưu Điểm

  1. Giảm sự phụ thuộc lẫn nhau giữa các đối tượng.
  2. Dễ dàng thêm hoặc thay đổi các đối tượng mà không ảnh hưởng đến hệ thống.
  3. Tối ưu hóa mã nguồn bằng cách tập trung logic giao tiếp vào một nơi duy nhất (Mediator).

Nhược Điểm

  1. Mediator Pattern có thể khiến Mediator trở nên quá tải khi quản lý quá nhiều đối tượng.
  2. Phức tạp hóa hệ thống nếu không thiết kế cẩn thận.

6. Khi Nào Nên Sử Dụng Mediator Pattern?

Mediator Pattern thường được áp dụng trong các tình huống sau:

  • Ứng dụng GUI phức tạp: Trong các ứng dụng giao diện người dùng, có nhiều đối tượng cần giao tiếp qua lại.
  • Hệ thống có nhiều module: Nếu có nhiều module cần tương tác với nhau, Mediator giúp chúng tách biệt và dễ bảo trì hơn.
  • Môi trường đa luồng: Mediator có thể giúp đồng bộ hóa dữ liệu khi có nhiều luồng chạy song song, giúp hạn chế lỗi.

7. So Sánh Mediator Pattern Với Các Mẫu Thiết Kế Khác

Mediator vs Observer

  • Mediator tập trung giao tiếp vào một đối tượng trung gian, giúp giảm sự phụ thuộc giữa các thành phần.
  • Observer lại tập trung vào việc thông báo sự thay đổi từ một đối tượng cho nhiều đối tượng khác.

Mediator vs Facade

  • Mediator chủ yếu điều phối giao tiếp giữa các đối tượng.
  • Facade tạo ra một giao diện đơn giản để tương tác với hệ thống phức tạp, nhưng không quản lý giao tiếp giữa các đối tượng.

8. Cách Triển Khai Mediator Pattern Trong Java

Dưới đây là cách triển khai Mediator Pattern trong Java:

 

// Interface Mediator

public interface ChatMediator {

    void sendMessage(String message, User user);

    void addUser(User user);

}


// Concrete Mediator

public class ChatMediatorImpl implements ChatMediator {

    private List<User> users;


    public ChatMediatorImpl() {

        this.users = new ArrayList<>();

    }


    @Override

    public void addUser(User user) {

        this.users.add(user);

    }


    @Override

    public void sendMessage(String message, User user) {

        for (User u : this.users) {

            if (u != user) {

                u.receive(message);

            }

        }

    }

}


// Abstract User

public abstract class User {

    protected ChatMediator mediator;

    protected String name;


    public User(ChatMediator mediator, String name) {

        this.mediator = mediator;

        this.name = name;

    }


    public abstract void send(String message);

    public abstract void receive(String message);

}


// Concrete User

public class UserImpl extends User {

    public UserImpl(ChatMediator mediator, String name) {

        super(mediator, name);

    }


    @Override

    public void send(String message) {

        System.out.println(this.name + " Sending Message: " + message);

        mediator.sendMessage(message, this);

    }


    @Override

    public void receive(String message) {

        System.out.println(this.name + " Received Message: " + message);

    }

}


// Main

public class MediatorPatternDemo {

    public static void main(String[] args) {

        ChatMediator mediator = new ChatMediatorImpl();


        User user1 = new UserImpl(mediator, "User1");

        User user2 = new UserImpl(mediator, "User2");

        User user3 = new UserImpl(mediator, "User3");


        mediator.addUser(user1);

        mediator.addUser(user2);

        mediator.addUser(user3);


        user1.send("Hello, Everyone!");

    }

}

Đọc thêm: Cách Tự Học Lập Trình Hiệu Quả Dành Cho Developer

9. Kết Luận

Mediator Pattern là một công cụ mạnh mẽ để tối ưu hóa sự tương tác giữa các đối tượng trong hệ thống, đặc biệt trong các ứng dụng phức tạp. Việc hiểu rõ và triển khai đúng Mediator giúp giảm thiểu sự phụ thuộc giữa các đối tượng, cải thiện khả năng mở rộng và bảo trì. Khi bạn hiểu rõ "Mediator Pattern là gì", bạn sẽ có thêm công cụ hữu ích để xây dựng các ứng dụng phức tạp, linh hoạt và dễ bảo trì.