Kody źródłowe/Mediator (wzorzec projektowy)

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania
Mediator (wzorzec projektowy)
Kod źródłowy
Kody źródłowe programów stosujących wzorzec projektowy mediatora
Wikipedia
Zobacz w Wikipedii hasło Mediator

Java[edytuj]

Przykładowy program w Javie ilustrujący wzorzec mediatora. Wynik działania:

Przesyłanie wiadomości od kim do toni: Hello world.
Wiadomość odebrana przez toni: Hello world.
Przesyłanie wiadomości od rene do kim: Witaj!
Wiadomość odebrana przez kim: Witaj!
import java.util.*;
 
interface Mediator {
    public void wyślij(String id, String wiadomość);
 }
 
class RzeczywistyMediator implements Mediator {
    private HashMap<String, Kolega> koledzy = new HashMap<String, Kolega>();
 
    public void zarejestrujKolegę(Kolega k) {
        k.zarejestrujMediatora(this);
        koledzy.put(k.getId(), k);
    }
 
    public void wyślij(String id, String wiadomość) {
        koledzy.get(id).odbierz(wiadomość);
    }
 }
 
class Kolega {
    private Mediator mediator;
    private String id;
 
    public Kolega(String id) { this.id = id; }
    public void zarejestrujMediatora(Mediator mediator) { this.mediator = mediator; }
    public String getId() { return id; }
     
    public void wyślij(String id, String wiadomość) {
        System.out.println("Przesyłanie wiadomości od "+this.id+" do "+id+": "+wiadomość);
        mediator.wyślij(id, wiadomość); // Rzeczywista komunikacja odbywa się za pośrednictwem mediatora!!!
    }
 
    public void odbierz(String wiadomość) {
        System.out.println("Wiadomość odebrana przez "+id+": "+wiadomość);
    }
 }
 
class PrzykładoweUżycieMediatora {
    public static void main(String[] args) {
        Kolega rene = new Kolega("rene");
        Kolega toni = new Kolega("toni");
        Kolega kim = new Kolega("kim");
         
        Mediator m = new RzeczywistyMediator();
        m.zarejestrujKolegę(rene);
        m.zarejestrujKolegę(toni);
        m.zarejestrujKolegę(kim);
 
        kim.wyślij("toni", "Hello world.");
        rene.wyślij("kim", "Witaj!");
    }
 }