PDHBE / study

기술 서적 Study
0 stars 0 forks source link

[GoF 디자인패턴] 중재자 (Mediator) 패턴 #21

Open leeyuunsung opened 2 years ago

leeyuunsung commented 2 years ago

중재자 패턴 1부 - 패턴 소개

실생활에서 중재자의 예시

중재자(Mediator) 패턴 아키텍처

스크린샷 2021-12-29 오후 11 50 08

예제(Before)

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();
    }
}

CleaningService

public class CleaningService {
    public void clean(Gym gym) {
        System.out.println("clean " + gym);
    }

    public void getTower(Guest guest, int numberOfTower) {
        System.out.println(numberOfTower + " towers to " + guest);
    }

    public void clean(Restaurant restaurant) {
        System.out.println("clean " + restaurant);
    }
}
leeyuunsung commented 2 years ago

중재자 패턴 2부 - 패턴 적용하기

예제(After)

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 "1111";
    }

    public void dinner(Guest guest, LocalDateTime dateTime) {
        restaurant.dinner(guest.getId(), dateTime);
    }
}

CleaningService

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);
    }
}

Guest

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;
    }
}
leeyuunsung commented 2 years ago

중재자 패턴 3부 - 장점과 단점

장점

위 예시에서는

단점

leeyuunsung commented 2 years ago

중재자 패턴 4부 - 자바와 스프링에서 찾아보는 패턴

자바

스프링

스크린샷 2022-01-02 오후 3 31 04