Wzorzec mediatora
Z Wikipedii
Wzorzec mediatora to w inżynierii oprogramowania jeden ze wzorców projektowych należący do grupy wzorców czynnościowych. Mediator zapewnia jednolity interfejs do różnych elementów danego podsystemu.
Wzorzec mediatora umożliwia zmniejszenie liczby powiązań między różnymi klasami, poprzez utworzenie mediatora będącego jedyną klasą, która dokładnie zna metody wszystkich innych klas, którymi zarządza. Nie muszą one nic o sobie wiedzieć, jedynie przekazują polecenia mediatorowi, a ten rozsyła je do odpowiednich obiektów.
[edytuj] Przykład
[edytuj] Java
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"); RzeczywistyMediator m = new RzeczywistyMediator(); m.zarejestrujKolegę(rene); m.zarejestrujKolegę(toni); m.zarejestrujKolegę(kim); kim.wyślij("toni", "Hello world."); rene.wyślij("kim", "Witaj!"); } }