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.