>  기사  >  Java  >  자바 디자인 패턴: 외관 패턴 예시 분석

자바 디자인 패턴: 외관 패턴 예시 분석

WBOY
WBOY앞으로
2023-04-20 15:49:08979검색

모드 소개

  • "프로세스 모드"라고도 하는 Facade 모드: Facade 모드는 하위 시스템의 인터페이스 세트에 대해 일관된 인터페이스를 제공합니다. 이 모드는 상위 수준 인터페이스를 정의하므로 하위 시스템을 더 쉽게 사용할 수 있습니다.

  • 외관 모드는

    일관적인 인터페이스를 정의하여 내부 하위 시스템의 세부 사항을 보호하는 데 사용되므로 호출자는 이 하위 시스템의 내부 세부 사항을 신경 쓰지 않고 이 인터페이스만 호출하면 됩니다. UML 클래스 다이어그램

클래스 다이어그램 분석: 자바 디자인 패턴: 외관 패턴 예시 분석

Facade
    : 호출자를 위한 통합 호출 인터페이스를 제공합니다. 모양 클래스는 호출자가 요청 처리를 담당하는 하위 시스템을 알고 있습니다. 요청은 적절한 하위 시스템 개체로 프록시됩니다.
  • Client
  • : 모양 인터페이스의 호출자
  • SubSystem 컬렉션
  • : Facade 개체에 의해 할당된 작업을 처리하는 모듈 또는 하위 시스템을 나타냅니다.
  • 외관 모드 사례:

배경 소개:

홈 시어터 구축: DVD 플레이어, 프로젝터, 자동 화면, 서라운드 사운드, 팝콘 기계, 완료하는 데 필요합니다. 홈시어터 기능을 리모콘으로 직접 제어(각 기기의 스위치 조정)하여

팝콘 기계 켜기

  • 스크린 내리기

  • 켜기 프로젝터

  • 스테레오 켜기

  • DVD 켜고 DVD 선택

  • 팝콘 사서

  • 조명 어둡게

  • play

  • 시청 후 영화 꺼 줘 다양한 장치.

DVD, P opcorn, Projector, Screen, Stereo 및 TheaterLight에 대한 코드는 다음과 같습니다.

public class DVDPlayer {
    // 使用单例模式
    private static  final DVDPlayer instance = new DVDPlayer();
    private DVDPlayer() {}
    public static DVDPlayer getInstance() {
        return instance;
    }
    public void on() {
        System.out.println("dvd 打开了...");
    }
    public void off() {
        System.out.println("dvd 关闭了...");
    }
    public void play() {
        System.out.println("dvd 播放中...");
    }
    public void pause() {
        System.out.println("dvd 暂停了...");
    }
}
public class Popcorn {
    private static final Popcorn instance = new Popcorn();
    private Popcorn(){}
    public static Popcorn getInstance() {
        return instance;
    }
    public void on() {
        System.out.println("爆米花机打开了...");
    }
    public void off() {
        System.out.println("爆米花机关闭了...");
    }
    public void pop() {
        System.out.println("爆米花做好了...");
    }
}
public class Projector {
    private static final Projector instance = new Projector();
    private Projector(){}
    public static Projector getInstance() {
        return instance;
    }
    public void on() {
        System.out.println("投影仪打开了...");
    }
    public void off() {
        System.out.println("投影仪关闭了...");
    }
    public void focus() {
        System.out.println("投影仪聚焦中...");
    }
}
public class Screen {
    private static final Screen instance = new Screen();
    private Screen(){}
    public static Screen getInstance() {
        return instance;
    }
    public void up() {
        System.out.println("屏幕上升...");
    }
    public void down() {
        System.out.println("屏幕下降...");
    }
}
public class Stereo {
    private static final Stereo instance = new Stereo();
    private Stereo(){}
    public static Stereo getInstance() {
        return instance;
    }
    public void on() {
        System.out.println("立体音响打开...");
    }
    public void off() {
        System.out.println("立体音响关闭...");
    }
    public void up() {
        System.out.println("立体音响音量+...");
    }
    public void down() {
        System.out.println("立体音响音量-...");
    }
}
public class TheaterLight {
    private static final TheaterLight instance = new TheaterLight();
    private TheaterLight(){}
    public static TheaterLight getInstance() {
        return instance;
    }

    public void on() {
        System.out.println("灯光打开...");
    }
    public void off() {
        System.out.println("灯光关闭...");
    }
    public void dim() {
        System.out.println("灯光亮度调暗...");
    }
    public void bright() {
        System.out.println("灯光亮度调亮...");
    }
}
자바 디자인 패턴: 외관 패턴 예시 분석HomeTheaterFacade(각 장치의 스위치를 조정합니다) 장치)

public class HomeTheaterFacade {
    private DVDPlayer dvdPlayer;
    private Popcorn popcorn;
    private Projector projector;
    private Stereo stereo;
    private Screen screen;
    private TheaterLight theaterLight;
    public HomeTheaterFacade() {
        this.dvdPlayer = DVDPlayer.getInstance();
        this.popcorn = Popcorn.getInstance();
        this.projector = Projector.getInstance();
        this.stereo = Stereo.getInstance();
        this.screen = Screen.getInstance();
        this.theaterLight = TheaterLight.getInstance();
    }

    /**
     * 准备开始
     */
    public void ready() {
        popcorn.on();
        popcorn.pop();
        screen.down();
        projector.on();
        projector.focus();
        stereo.on();
        dvdPlayer.on();
        theaterLight.dim();
    }

    /**
     * 播放
     */
    public void play() {
        dvdPlayer.play();
    }

    /**
     * 暂停
     */
    public void pause() {
        dvdPlayer.pause();
    }

    /**
     * 结束
     */
    public void end() {
        popcorn.off();
        theaterLight.bright();
        screen.up();
        projector.off();
        stereo.off();
        dvdPlayer.off();
    }
}

클라이언트(테스트)DVD、Popcorn、Projector、Screen、Stereo、TheaterLight代码如下:

public class Client {
    public static void main(String[] args) {
        HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade();
        System.out.println("----------准备开始-----------");
        homeTheaterFacade.ready();
        System.out.println("----------开始播放-----------");
        homeTheaterFacade.play();
        System.out.println("----------播放暂停-----------");
        homeTheaterFacade.pause();
        System.out.println("----------播放结束-----------");
        homeTheaterFacade.end();
    }
}
rrreeerrreeerrreeerrreeerrreee

HomeTheaterFacade(统筹各设备开关)

rrreee

Client(测试)rrreee

구현 결과:

자바 디자인 패턴: 외관 패턴 예시 분석

표시 모드에 대한 참고 및 세부 정보

  • 표시 모드

    는 다음의 세부 정보를 보호합니다. 외부에서 하위 시스템을 사용하므로 표시 모드는 클라이언트의 하위 시스템 사용의 복잡성을 줄여줍니다

  • . 표시 모드는 클라이언트와 하위 시스템 간의 결합 관계를 분리하여 하위 시스템 내의 모듈을 더 쉽게 유지 관리하고 확장할 수 있도록 합니다. .외형 모드를 적절하게 사용하면

    액세스 수준을 나누는 데 도움이 됩니다

    .
  • 시스템을 계층적으로 설계해야 하는 경우

  • 유지 관리할 때 사용하는 것이 좋습니다. 대규모 레거시 시스템의 경우 유지 관리 및 확장이 매우 어려워질 수 있습니다. 이때 새로운 시스템으로 사용하는 것을 고려해 볼 수 있습니다. 레거시 시스템에 대한 보다 명확하고 간단한 인터페이스를 제공하여 새로운 시스템을 허용합니다. Facade 클래스와 상호 작용하고 재사용성을 높이려면
  • 외형 모드를 너무 많이 사용하거나 무리하게 사용하지 말고 모듈을 직접 호출하는 것이 좋습니다. 목적은 시스템을 계층적으로 만들고 유지 관리를 용이하게 하는 것입니다.

위 내용은 자바 디자인 패턴: 외관 패턴 예시 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제