Wzorzec operacyjny Mediator jest wykorzystywany do skupiania złożonych procedur komunikacji i sterowania w środowisku powiązanych obiektów. Obiekty w systemie zamiast komunikować się między sobą bezpośrednio robią to poprzez klasę Mediatora - nie muszą wtedy wiedzieć o swoim własnym istnieniu bezpośrednio. Wysyłają informację do mediatora, a on przekaże go do obiektu, który ma być celem żądania. Pozwala to na łatwą przyszłą modyfikację aplikacji, ponieważ wszystkie wspólne relacje są w jednym miejscu.
W konstruktorze przekazywane są ListBox, TextBox. Dla TextBox rejestrowana jest instancja klasy EventHandler. Obiekt EventHandler wywołuje metodę TextFieldChanged za każdym razem gdy użytkownik zmieni zwartość pola tekstowego. Kontrolki TextBox i ListBox mogą w ogóle nie wiedzieć o istnieniu mediatora.
public class QuickEntryMediator
{
private TextBox itsTextBox;
private ListBox itsList;
public QuickEntryMediator(TextBox t, ListBox l)
{
itsTextBox = t;
itsList = l;
itsTextBox.TextChanged += new EventHandler(TextFieldChanged);
}
private void TextFieldChanged(object source, EventArgs args)
{
string prefix = itsTextBox.Text;
if (prefix.Length == 0)
{
itsList.ClearSelected();
return;
}
ListBox.ObjectCollection listItems = itsList.Items;
bool found = false;
for (int i = 0; found == false &&
i < listItems.Count; i++)
{
Object o = listItems[i];
String s = o.ToString();
if (s.StartsWith(prefix))
{
itsList.SetSelected(i, true);
found = true;
}
}
if (!found)
{
itsList.ClearSelected();
}
}
}