작심삼일

13주차. Mediator 본문

스터디/디자인 패턴

13주차. Mediator

yun_s 2021. 9. 9. 21:35
728x90
반응형

디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다.

틀린 부분은 알려주시면 감사하겠습니다.

어떤 패턴인가

한 집합에 속해있는 객체의 상호작용을 캡슐화하는 객체를 정의합니다.

객체들이 직접 서로를 참조하지 않도록 하여 객체 사이의 소결합(loose coupling)을 촉진시키며, 개발자가 객체의 상호작용을 독립적으로 다양화시킬 수 있게 만듭니다.


어떻게 쓰는가

Mediator: Colleague 객체와 교류하는 데 필요한 인터페이스를 정의합니다.

ConcreteMediator: Colleague 객체와 조화를 이뤄서 협력 행동을 구현하며, 자신이 맡을 동료(colleague)를 파악하고 관리합니다.

Colleagues: 자신의 중재자 객체가 무엇인지 파악합니다.

class Users:
    def __init__(self):
        self.users = []
        
    def add_user(self, user):
        self.users.append(user)
    
    def del_user(self, user):
        self.users.remove(user)
        
    def send_msg(self, msg, user):
        print('message to user ' + user.name + ': ' + msg)
        

class Person:
    def __init__(self, mediator, name):
        self.mediator = mediator
        self.name = name
        
    def send(self, msg):
        self.mediator.send_msg(msg, self)
        
-----------------------------------------------------------------
users = Users()
p1 = Person(users, 'a')
p2 = Person(users, 'b')

users.add_user(p1)
users.add_user(p2)

p1.send('Hi')                         # 'message to user a: Hi'
ysers.del_user(p2)

어디서 활용되는가

이는 책의 내용 (p. 362)을 그대로 가져왔다.

1. 여러 객체가 잘 정의된 형태이기는 하지만 복잡한 상호작용을 가질 때.

2. 한 객체가 다른 객체를 너무 많이 참조하고, 너무 많은 의사소통을 수행해서 그 객체를 재사용하기 힘들 때

3. 여러 클래스에 분산된 행동들이 상속 없이 상황에 맞게 수정되어야 할 때


My Opinion

간단히 말하면, 참조가 많아지거나 상호작용이 많아질 때 이 mediator 패턴을 사용하면 간단하게 코딩할 수 있다.하지만 mediator 객체에 너무 많은 권한을 주면 오히려 좋지 않을 수 있으니, 이 부분에 유의해서 사용하는 것이 좋다.

728x90
반응형

'스터디 > 디자인 패턴' 카테고리의 다른 글

14주차-2. Bridge  (0) 2021.09.23
14주차-1. Observer  (0) 2021.09.23
12주차. Facade  (0) 2021.08.18
11주차. Builder  (0) 2021.08.11
10주차. Memento  (0) 2021.07.28
Comments