Mediator Pattern giảm phụ thuộc class

1 min read

Mediator design pattern

Mediator Pattern là gì

Mediator Pattern là một mẫu thiết kế hành vi (behavioral design pattern) trong lập trình hướng đối tượng. Mục tiêu của Mediator Pattern là giảm sự phụ thuộc giữa các đối tượng và thay vào đó tạo ra một lớp trung gian (Mediator) để quản lý tất cả các sự tương tác giữa các đối tượng.

Cài đặt Mediator Pattern

Trong Mediator Pattern, có một số thành phần chính:

  1. Mediator (Trung gian): Định nghĩa một giao diện hoặc lớp để tương tác với các thành viên khác, quản lý các sự kiện và thông tin truyền tải giữa các đối tượng.
  2. Colleague (Đồng nghiệp): Đây là các đối tượng mà Mediator quản lý và các đối tượng này giao tiếp với nhau thông qua Mediator thay vì giao tiếp trực tiếp với nhau.
  3. Concrete Mediator: Triển khai Mediator và quản lý tất cả các sự kiện và tương tác giữa các đối tượng đồng nghiệp.
  4. Concrete Colleague: Triển khai các đối tượng đồng nghiệp, khi cần giao tiếp với các đối tượng khác, chúng sẽ gửi thông tin thông qua Mediator.
// Mediator Interface
interface Mediator {
    void sendMessage(String message, Colleague colleague);
}

// Concrete Mediator
class ChatRoom implements Mediator {
    public void sendMessage(String message, Colleague colleague) {
        // Gửi tin nhắn từ một đồng nghiệp đến tất cả các đồng nghiệp còn lại
        System.out.println(colleague.getName() + " gửi tin nhắn: " + message);
    }
}

// Colleague
abstract class Colleague {
    protected Mediator mediator;
    private String name;

    public Colleague(Mediator mediator, String name) {
        this.mediator = mediator;
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public abstract void sendMessage(String message);
}

// Concrete Colleague
class User extends Colleague {
    public User(Mediator mediator, String name) {
        super(mediator, name);
    }

    public void sendMessage(String message) {
        mediator.sendMessage(message, this);
    }
}

// Sử dụng
public class Main {
    public static void main(String[] args) {
        Mediator chatRoom = new ChatRoom();

        Colleague user1 = new User(chatRoom, "Alice");
        Colleague user2 = new User(chatRoom, "Bob");

        user1.sendMessage("Chào bạn!");
        user2.sendMessage("Xin chào!");

        // Output:
        // Alice gửi tin nhắn: Chào bạn!
        // Bob gửi tin nhắn: Xin chào!
    }
}

Khi sử dụng Mediator: user không cần tự kiểm tra, không quan tâm ai có thể nhận message, user chỉ việc gửi thông tin đến Mediator của group. Mediator sẽ tự điều phối message này đến người nhận.

Link tham khảo

https://refactoring.guru/design-patterns/mediator

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *