설계패턴 25. Mediator Pattern

LSDrug·2024년 6월 14일

설계패턴(完)

목록 보기
25/26

1. 정의

회원 10명이 모여서 공동 작업을 하고 있지만, 정리가 되지 않고 옥신각신 하는 모임을 상상해 보자.

  • 객체 간의 복잡한 상호작용을 중앙 집중화하여 관리할 필요가 있는 상황에서 주로 사용된다.

  • 객체들이 직접 통신하는 대신 Mediator를 통해 간접적으로 통신하도록 하여 결합도를 낮추고 코드의 유지 보수성을 높인다.

  • mediator는 중개인, 각 회원들은 colleage에 해당한다.

2. 확장

  • 직접적으로 object간의 method를 호출하면 그 구조의 Dependency가 복잡해진다.

  • Object의 클래스를 다른 곳에서 사용할 수 없다.

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

이때, C가 정보를 중재자에게 주면 A, B, D에게 뿌려준다.

3. 예시

조명과 스피커를 키는 코드를 선택하자.

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()

profile
마약같은 코딩, 마약같은 코딩러

0개의 댓글