Open leeyuunsung opened 2 years ago
public class FrontDesk {
private CleaningService cleaningService = new CleaningService();
private Restaurant restaurant = new Restaurant();
public void getTowers(Guest guest, int numberOfTowers) {
cleaningService.getTowers(guest.getId(), numberOfTowers);
}
public String getRoomNumberFor(Integer guestId) {
return "1111";
}
public void dinner(Guest guest, LocalDateTime dateTime) {
restaurant.dinner(guest.getId(), dateTime);
}
}
FrontDesk
에 모아두고 객체간 의사소통을 중재자를 통해 하는 식FrontDesk
라는 중재자만 참조하여 객체간 의사소통을 주고 받아 객체간 복잡한 의존성들이 없어지게 된다FrontDesk
가 필요한 요청을 다른 객체에게 요청할 때 파라미터로 객체 전체를 보내는게 아니라 필요한 최소한의 정보만 전달하여 요청한다public class CleaningService {
private FrontDesk frontDesk = new FrontDesk();
public void getTowers(Integer guestId, int numberOfTowers) {
String roomNumber = this.frontDesk.getRoomNumberFor(guestId);
System.out.println("provide " + numberOfTowers + " to " + roomNumber);
}
}
public class Guest {
private Integer id;
private FrontDesk frontDesk = new FrontDesk();
public void getTowers(int numberOfTowers) {
this.frontDesk.getTowers(this, numberOfTowers);
}
private void dinner(LocalDateTime dateTime) {
this.frontDesk.dinner(this, dateTime);
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
FrontDesk
는 인터페이스가 아니라 클래스이기 때문에 코드의 변경이 있을 수 있음FrontDesk
를 사용하는 방식이 위의 장점에 해당된다multipartResolver
, handlerMappings
등의 컴포넌트들은 서로를 참조하여 사용하지 않음
중재자 패턴 1부 - 패턴 소개
실생활에서 중재자의 예시
중재자(Mediator) 패턴 아키텍처
예제(Before)
Hotel
CleaningService