16

As the title states when would you recommend the use of the mediator design pattern and where do you see it used incorrectly?

Blair Conrad
  • 233,004
  • 25
  • 132
  • 111
hhafez
  • 38,949
  • 39
  • 113
  • 143

3 Answers3

24

Use a mediator when the complexity of object communication begins to hinder object reusability. This type of complexity often appears in view instances, though it could really be anywhere.

Misuse of a mediator can result in crippling the interfaces of the mediator's colleague classes.

It seems a little funny to talk about misusing a pattern. If your implementation follows the pattern, then you've used the pattern. Otherwise, you haven't. In other words, if your mediator is doing something else, then it probably isn't a mediator. Patterns are defined by what they do, what they in fact are. The names of things are simply labels.

The real question to ask yourself is whether your implementation of a pattern fulfills the pattern's promises for your design. The mediator pattern aims to encapsulate complex inter-object communication when it is becoming unmanageable. If it hasn't accomplished this, or hasn't done it very well, you could say that a mediator is being misused. At some point, it becomes a value judgement.

keparo
  • 33,450
  • 13
  • 60
  • 66
2

I have used it to deal with swing apps.

When I'm building a GUI I don't like each control knowing each other because that would require subclassing.

Instead I have a Main object which contains the listener and the widgets and let it mediate between the different controls, buttons, textfields etc.

StefanJM
  • 1,533
  • 13
  • 18
OscarRyz
  • 196,001
  • 113
  • 385
  • 569
  • I believe by the fact that you used the word "contains" here that this is actually not the Mediator pattern. It sounds more like the Facade pattern (or what I would call a Manager class). Mediator seems to be moreso having a shared class between 2 classes, perhaps that you pass from one to the other, or that you give a reference to to both classes, which then acts as an indirect connection between them. – Andrew May 27 '20 at 06:34
  • And actually the shared class that you pass from one class to another sounds more like the Flyweight pattern lol. Idk I think maybe these definitions are too ambiguous and/or too tightly coupled to specific languages. – Andrew May 27 '20 at 06:42
1

The mediator is also basically what an event-pump is. A very common pattern in GUI's and Games.

Also I've used mediator before to communicate among very dispar systems, and legacy frameworks.

Robert Gould
  • 68,773
  • 61
  • 187
  • 272
  • Event-Pump == Event-Hub, right? Just a bussing system, basically? Or rather Event-Driven Mediation (routes requests)? – Cody Jan 19 '17 at 22:39