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 |