Wzorzec projektowy Mediator w Java

Wzorzec projektowy Mediator jest używany do zmniejszenia skomplikowanej komunikacji i zależności między obiektami w systemie. Pozwala on na centralne zarządzanie interakcjami między obiektami, co ułatwia ich niezależność i ponowne wykorzystanie. W Javie, wzorzec ten można zaimplementować poprzez stworzenie mediatora, który koordynuje komunikację między różnymi klasami.

Przykład użycia wzorca Mediator

W tym przykładzie zaimplementujemy prosty system czatu, w którym różne użytkowniki mogą wysyłać wiadomości do siebie poprzez mediatora.

Klasa Mediator

Najpierw zdefiniujemy interfejs Mediator, który będzie zawierał metodę do wysyłania wiadomości.

// Interfejs mediatora
public interface Mediator {
    void sendMessage(String message, User user);
}
Klasa ChatMediator

Następnie, stworzymy konkretną klasę ChatMediator implementującą Mediator. Ta klasa będzie zarządzać komunikacją między użytkownikami.

import java.util.ArrayList;
import java.util.List;

// Konkretna implementacja mediatora dla czatu
public class ChatMediator implements Mediator {
    private List<User> users;

    public ChatMediator() {
        this.users = new ArrayList<>();
    }

    public void addUser(User user) {
        this.users.add(user);
    }

    @Override
    public void sendMessage(String message, User user) {
        for (User u : users) {
            // Nie wysyłaj wiadomości do użytkownika,
            // który ją wysłał
            if (u != user) {
                u.receive(message);
            }
        }
    }
}
Klasa User

Teraz zdefiniujemy abstrakcyjną klasę User, która będzie reprezentować uczestników czatu.

// Abstrakcyjna klasa użytkownika w systemie czatu
public abstract class User {
    protected Mediator mediator;
    protected String name;

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

    public abstract void send(String message);
    public abstract void receive(String message);
}
Klasa ConcreteUser

Na koniec, zaimplementujemy konkretną klasę ConcreteUser, która dziedziczy po User i implementuje metody wysyłania i odbierania wiadomości.

// Konkretna implementacja użytkownika
public class ConcreteUser extends User {

    public ConcreteUser(Mediator mediator, String name) {
        super(mediator, name);
    }

    @Override
    public void send(String message) {
        System.out.println(this.name 
            + ": Wysyłanie wiadomości= " + message);
        mediator.sendMessage(message, this);
    }

    @Override
    public void receive(String message) {
        System.out.println(this.name 
               + ": Otrzymano wiadomość= " + message);
    }
}
Użycie Mediatora

Wreszcie, zobaczmy, jak użyć naszego mediatora do komunikacji między użytkownikami.

public class ChatClient {
    public static void main(String[] args) {
        ChatMediator mediator = new ChatMediator();

        User user1 = new ConcreteUser(mediator, "Jan");
        User user2 = new ConcreteUser(mediator, "Anna");
        User user3 = new ConcreteUser(mediator, "Piotr");

        mediator.addUser(user1);
        mediator.addUser(user2);
        mediator.addUser(user3);

        user1.send("Cześć wszystkim!");
    }
}

Podsumowanie

Wzorzec Mediator w Javie ułatwia zarządzanie komunikacją między różnymi obiektami, zmniejszając ich bezpośrednie zależności. W naszym przykładzie, mediator ChatMediator umożliwiał bezpośrednią komunikację między użytkownikami czatu, ConcreteUser,

Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Java w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

Scroll to Top