본문 바로가기

강의/Design pattern

중재자(Mediator) 패턴

SMALL

Mediator Pattern

여러 객체들 간의 의사소통을 하는 역할을 추상화시키는 패턴
직접 의사소통을 하고 있는 컴포넌트들은 결합도가 높아 코드를 수정하거나 테스트 하기 어렵다.


Code Example

Guest

public class Guest {
	private Restaurant restaurant = new Restaurant();
	private CleanService cleanService = new CleanService();

	public void dinner() {
		restaurant.dinner(this);
	}
	public void getTower(int numberOfTower) {
		cleaningService.getTower(this, numberOfTower);
	}
}

Hotel

public class Hotel {
	public static void main(String[] args) {
		Guest guest = new Guest();
		guest.getTower(3);
		guest.dinner();

		Restaurant restaurant = new Restaurant();
		restaurant.clean();
	}
}

Code Example - 2

FrontDesk - Mediator

public class FrontDesk {
	private CleaningService cleaningService = new CleaningService();

	public void getTowers(Guest guest, int numberOfTowers) {
		cleaningService.getTowers(guest.getId(), numbersOfTowers);
	}
	public String getRoomNumberFor(Integer guestId) {
		return "1111";
	}
	public void dinner(Guest guest, LocalDateTime dateTime) {
		restaurant.dinner(guest.getId(), dateTime);
	}
}

Guest

public class Guest {
	private Integer id;
	private FrontDesk frontDesk = new FrontDesk();

	public Integer getId() {
		return id;
	}
	public void dinner(LocalDateTime dateTime) {
		this.frontDesk.dinner(this, dateTime);
	}
	public void getTowers(int numberOfTowers) {
		this.frontDesk.getTowers(numberOfTowers)
	}
}

CleaningService

public class CleaningService {
	private FrontDesck frontDesk = new FrontDesk();
	public void getTowers(Integer guestId, int numberOfTowers) {
		String roomNumber = this.frontDesk.getRoomNumberFor(guestId);
	}
}

장단점

장점

  • 컴포넌트 코드를 변경하지 않고 새로운 중재자를 만들어 사용할 수 있음
  • 각각의 컴포넌트 코드를 보다 간결하게 유지할 수 있음

단점

  • 중재자 역할을 하는 클래스의 복잡도와 결합도 증가

Example

ExecutorService, Executor

DispatcherServlet

여러개의 컴포넌트를 연결시켜 핸들러 매핑을 여러개 둠.

SMALL

'강의 > Design pattern' 카테고리의 다른 글

상태(State) 패턴  (0) 2022.09.22
관찰자(Observer) 패턴  (0) 2022.09.22
이터레이터(Iterator) 패턴  (0) 2022.09.22
인터프리터(Interpreter) 패턴  (0) 2022.09.22
커맨드(Command) 패턴  (0) 2022.09.22