본문 바로가기
Open API/Design Pattern

Mediator 패턴

by 이재만박사 2017. 2. 27.

* 프로그램 복잡도


- 서로 완벽하게 관계를 가지면 N * (N - 1) 가지의 관계가 존재

- 관계를 일일이 이해하는 것은 불가능

- 각각 클래스들이 순환 참조


- 각각의 클래스나 객체 간의 커뮤니케이션을 특정 클래스나 객체가 중재해주는 형태로 변환

- M : N의 복잡한 관계를 M : 1 의 관계로 간소화 시켜주는 방식


예제)

- 커피 자판기


- 현재 상태를 표시하는 램프


- 종이컵과 원료 관리, 원료를 배합해서 커피를 만드는 믹서


- 동적을 받아들이고 관리하는 동전 박스



클래스 정의


- Lamp


- Mixer


- CoinBox


- BillBox



- 동작들을 수행하기 위해서는 각 클래스의 객체들이 서로 어떤 형태로든 커뮤니케이션을 가져야 하는 점


- 자동 판매기가 고장났을 경우 Mixer가 이를 감지


- 이를 램프 객체에 알려 고장 표시 램프를 켬


- 동전이나 지폐를 입력하더라도 곧바로 반환


- 원료가 부족할 경우 보충되는 즉시 원료 부족 램프를 끄고 정상적인 서비스를 제공


- 동전이나 지폐가 꽉 찬 경우에는 관리자가 이를 빼내갈 때까지 기다렸다가 해당 램프를 끄고 정상적인 동작



- 자동 판매기가 고장났을 경우 Mixer 가 감지 -> 램프에 알려  고장 표시 램프 켜기


- 자동 판매기가 고장났을 경우 Mixer 가 감지 -> CoinBox나 BillBox에게도 알려 더 이상 돈을 받지 않도록 함


- CoinBox 객체에 동전이 부족하거나 꽉 찬 경우에도 Lamp 객체에 알려 알맞는 램프를 켜도록 해야 함


- 동전이 부족한 경우에는 BillBox 객체에게 알려 지폐 입력 시 반환




* Mediator 패턴


- 클래스 간 커뮤니케이션이나 연동 동작을 위한 중재 클래스를 별도로 정의


-  그 클래스의 객체를 활용해서 간접적으로 클래스 간 커뮤니케이션이나 연동 동작이 일어나게 만드는 것




















댓글