회원 10명이 모여서 공동 작업을 하고 있지만, 정리가 되지 않고 옥신각신 하는 모임을 상상해 보자.
객체 간의 복잡한 상호작용을 중앙 집중화하여 관리할 필요가 있는 상황에서 주로 사용된다.
객체들이 직접 통신하는 대신 Mediator를 통해 간접적으로 통신하도록 하여 결합도를 낮추고 코드의 유지 보수성을 높인다.

직접적으로 object간의 method를 호출하면 그 구조의 Dependency가 복잡해진다.
Object의 클래스를 다른 곳에서 사용할 수 없다.

그러나 Mediator를 이용해 모든 Communication의 흐름이 집중되게 한다면, 복잡한 Dependency가 없어지고 Object들의 클래스를 다른 곳에서 사용할 수 있다.

이때, C가 정보를 중재자에게 주면 A, B, D에게 뿌려준다.
조명과 스피커를 키는 코드를 선택하자.
class Mediator:
def notify(self, signal: str):
pass
class Clock:
def setMediator(self, mediator:Mediator):
self.mediator = mediator
def Alarm(self):
print("alarm on")
self.mediator.notify('AlarmOn')
class Light:
def setMediator(self, mediator:Mediator):
self.mediator = mediator
def On(self):
print("light On")
def Off(self):
print("light Off")
self.mediator.notify("LightOff")
class Speaker:
def setMediator(self, mediator:Mediator):
self.mediator = mediator
def On(self):
print("speaker On")
def Off(self):
print("speaker Off")
self.mediator
class HomeMediator(Mediator):
def __init__(self):
self.clock = Clock()
self.light = Light()
self.speaker = Speaker()
def notify(self, signal: str):
if signal == 'AlarmOn':
self.light.On()
self.speaker.On()
elif Signal == 'LightOff':
self.speaker.Off()
clock = Clock()
light = Light()
speaker = Speaker()
mediator = HomeMediator()
clock.setMediator(mediator)
light.setMediator(mediator)
speaker.setMediator(mediator)
clock.Alarm()
light.Off()