// 서브시스템 1: TV
class TV {
    public void on() {
        System.out.println("TV is On");
    }

    public void off() {
        System.out.println("TV is Off");
    }
}

// 서브시스템 2: DVD 플레이어
class DVDPlayer {
    public void on() {
        System.out.println("DVD Player is On");
    }

    public void play() {
        System.out.println("DVD is Playing");
    }

    public void stop() {
        System.out.println("DVD Stopped");
    }

    public void off() {
        System.out.println("DVD Player is Off");
    }
}

// 서브시스템 3: 스피커
class Speaker {
    public void on() {
        System.out.println("Speaker is On");
    }

    public void off() {
        System.out.println("Speaker is Off");
    }
}

// 파사드: 홈시어터 시스템의 단순화된 인터페이스 제공
class HomeTheaterFacade {
    private TV tv;
    private DVDPlayer dvdPlayer;
    private Speaker speaker;

    public HomeTheaterFacade(TV tv, DVDPlayer dvdPlayer, Speaker speaker) {
        this.tv = tv;
        this.dvdPlayer = dvdPlayer;
        this.speaker = speaker;
    }

    public void watchMovie() {
        tv.on();
        speaker.on();
        dvdPlayer.on();
        dvdPlayer.play();
        System.out.println("Enjoy the movie!");
    }

    public void endMovie() {
        dvdPlayer.stop();
        dvdPlayer.off();
        speaker.off();
        tv.off();
        System.out.println("Movie ended, system is off.");
    }
}

// 클라이언트: 파사드를 통해 시스템을 단순화하여 사용
public class Main {
    public static void main(String[] args) {
        TV tv = new TV();
        DVDPlayer dvdPlayer = new DVDPlayer();
        Speaker speaker = new Speaker();

        HomeTheaterFacade homeTheater = new HomeTheaterFacade(tv, dvdPlayer, speaker);

        // 영화 시청 시작
        homeTheater.watchMovie();

        // 영화 종료
        homeTheater.endMovie();
    }
}

컨트롤러가 여러개 일때나 필요하지 굳이 내 생각에는 여기 과제에서 쓸일은 없어 보인다.

적어도 여기서의 적용 예시가도움이 되지는 않는다.