티스토리 뷰
728x90
1. 중재자 패턴
- 여러 객체들이 소통하는 방법을 캡슐화하는 패턴
- 여러 컴포넌트간의 결합도를 중재자를 통해 낮출 수 있다.
2. 중재자 패턴 적용
2.1. 적용 전 코드
public class CleaningService {
public void clean(Gym gym) {
System.out.println("clean " + gym);
}
public void getTowel(Guest guest, int numberOfTowel) {
System.out.println(numberOfTowel + " towels to " + guest);
}
public void clean(Restaurant restaurant) {
System.out.println("clean " + restaurant);
}
}
public class Restaurant {
private CleaningService cleaningService = new CleaningService();
public void dinner(Guest guest) {
System.out.println("dinner " + guest);
}
public void clean() {
cleaningService.clean(this);
}
}
public class Gym {
private CleaningService cleaningService;
public void clean() {
cleaningService.clean(this);
}
}
public class Guest {
private Restaurant restaurant = new Restaurant();
private CleaningService cleaningService = new CleaningService();
public void dinner() {
restaurant.dinner(this);
}
public void getTower(int numberOfTowel) {
cleaningService.getTowel(this, numberOfTowel);
}
}
public class Hotel {
public static void main(String[] args) {
Guest guest = new Guest();
guest.getTowel(3);
guest.dinner();
Restaurant restaurant = new Restaurant();
restaurant.clean();
}
}
2.2. 적용 후 코드
- 중재자역할 클래스(FrontDesk)
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 "room number";
}
public void dinner(Guest guest, LocalDateTime dateTime) {
restaurant.dinner(guest.getId(), dateTime);
}
}
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 {
@Getter @Setter 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);
}
}
3. 장점 및 단점
3.1. 장점
- 컴포넌트 코드를 변경하지 않고 새로운 중재자를 만들어 사용할 수 있다.
- 각각의 컴포넌트 코드를 보다 간결하게 유지할 수 있다.
3.2. 단점
- 중재자 역할을 하는 클래스의 복잡도와 결합도가 증가한다
위글은 인프런의 코딩으로 학습하는 GoF의 디자인 패턴강의를 정리하였습니다.
백기선님의 수락으로 정리하였으며 더 자세한 내용은 강의를 수강하시기 바랍니다.
https://www.inflearn.com/course/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4/dashboard
728x90
'디자인 패턴' 카테고리의 다른 글
19. 옵저버 패턴 (0) | 2022.02.11 |
---|---|
18. 메멘토 패턴 (0) | 2022.02.10 |
16. 이터레이터 패턴 (0) | 2022.02.10 |
15. 인터프리터 패턴 (0) | 2022.02.10 |
14. 커맨드 패턴 (0) | 2022.02.10 |
댓글