Headfirst java设计模式-外观模式

外观模式:提供一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易使用。
简而言之:外观模式目的是让接口更简单。

代码实现:
(1)实现多个影音播放的相关类

public class Amplifier {
    private Tuner tuner;
    private DvdPlayer dvdPlayer;
    private CdPlayer cdPlayer;

    public void on() {
        System.out.println("Amplifier: on");
    }

    public void off() {
        System.out.println("Amplifier: off");
    }

    public void setCd(CdPlayer cdPlayer) {
        System.out.println("Amplifier: setCd");
        this.cdPlayer = cdPlayer;
    }

    public void setDvd(DvdPlayer dvdPlayer) {
        System.out.println("Amplifier: setDvd");
        this.dvdPlayer = dvdPlayer;
    }

    public void setStereoSound() {
        System.out.println("Amplifier: setStereoSound");
    }

    public void setSurroundSound() {
        System.out.println("Amplifier: setSurroundSound");
    }

    public void setTuner() {
        System.out.println("Amplifier: setTuner");
    }

    public void setVolume(int volume) {
        System.out.println("Amplifier: setVolume: " + volume);
    }

    @Override
    public String toString() {
        return "Amplifier";
    }
}

public class CdPlayer {
    private Amplifier amplifier;

    public void on() {
        System.out.println("CdPlayer: on");
    }

    public void off() {
        System.out.println("CdPlayer: off");
    }

    public void eject() {
        System.out.println("CdPlayer: eject");
    }

    public void play(String media) {
        System.out.println("CdPlayer: play " + media);
    }

    public void stop() {
        System.out.println("CdPlayer: stop");
    }

    @Override
    public String toString() {
        return "CdPlayer";
    }

}

public class DvdPlayer {
    private Amplifier amplifier;

    public void on() {
        System.out.println("DvdPlayer: on");
    }

    public void off() {
        System.out.println("DvdPlayer: off");
    }

    public void eject() {
        System.out.println("DvdPlayer: eject");
    }

    public void play(String movie) {
        System.out.println("DvdPlayer: play " + movie);
    }

    private void setSurroundAudio() {
        System.out.println("DvdPlayer: setSurroundAudio");
    }

    private void setTwoChanelAudio() {
        System.out.println("DvdPlayer: setTwoChanelAudio");
    }

    public void stop() {
        System.out.println("DvdPlayer: stop");
    }

    @Override
    public String toString() {
        return "DvdPlayer";
    }
}

public class PopcornPopper {

    public void on() {
        System.out.println("PopcornPopper: on");
    }

    public void off() {
        System.out.println("PopcornPopper: off");
    }

    public void pop() {
        System.out.println("PopcornPopper: pop");
    }

    @Override
    public String toString() {
        return "PopcornPoppe";
    }
}

public class Projector {
    private DvdPlayer dvdPlayer;

    public void on() {
        System.out.println("Projector: on");
    }

    public void off() {
        System.out.println("Projector: off");
    }

    public void tvMode() {
        System.out.println("Projector: tvMode");
    }

    public void wideScreenMode() {
        System.out.println("Projector: wideScreenMode");
    }

    @Override
    public String toString() {
        return "Projector";
    }
}

public class Screen {
    public void up() {
        System.out.println("Screen: up");
    }

    public void down() {
        System.out.println("Screen: down");
    }

    @Override
    public String toString() {
        return "Screen";
    }
}

public class TheaterLights {
    public void on() {
        System.out.println("TheraterLights: on");
    }

    public void off() {
        System.out.println("TheraterLights: off");
    }

    public void dim(int dim) {
        System.out.println("TheraterLights: dim " + dim);
    }

    @Override
    public String toString() {
        return "Screen";
    }
}

public class Tuner {
    private Amplifier amplifier;

    public void on() {
        System.out.println("Tuner: on");
    }

    public void off() {
        System.out.println("Tuner: off");
    }

    public void setAm() {
        System.out.println("Tuner: setAm");
    }

    public void setFm() {
        System.out.println("Tuner: setFm");
    }

    public void setFreuency() {
        System.out.println("Tuner: setFreuency");
    }

    @Override
    public String toString() {
        return "Tuner";
    }
}

(2)采用外观模式,创建一个HomeTheratorFacade类简化影音播放的相关接口

public class HomeTheratorFacade {
    Amplifier amp;
    Tuner tuner;
    DvdPlayer dvd;
    CdPlayer cd;
    Projector projector;
    TheaterLights lights;
    Screen screen;
    PopcornPopper popper;

    public HomeTheratorFacade(Amplifier amp,
            Tuner tuner,
            DvdPlayer dvd,
            CdPlayer cd,
            Projector projector,
            Screen screen,
            TheaterLights lights,
            PopcornPopper popper) {
        this.amp = amp;
        this.tuner = tuner;
        this.dvd = dvd;
        this.cd = cd;
        this.projector = projector;
        this.screen = screen;
        this.lights = lights;
        this.popper = popper;
    }

    public void watchMovie(String movie) {
        System.out.println("Get ready to watch a movie...");
        popper.on();
        popper.pop();
        lights.dim(10);
        screen.down();
        projector.on();
        projector.wideScreenMode();
        amp.on();
        amp.setDvd(dvd);
        amp.setStereoSound();
        amp.setVolume(5);
        dvd.on();
        dvd.play(movie);
    }

    public void endMovie() {
        System.out.println("Shutting movie therator down...");
        popper.off();
        lights.on();
        screen.up();
        projector.off();

        amp.off();
        dvd.stop();
        dvd.eject();
        dvd.off();
    }
}

(3)测试代码

public class HomeTheratorTestDrive {
    public static void main(String[] args) {
        Amplifier amp = new Amplifier();
        Tuner tuner = new Tuner();
        DvdPlayer dvd = new DvdPlayer();
        CdPlayer cd = new CdPlayer();
        Projector projector = new Projector();
        Screen screen = new Screen();
        TheaterLights lights = new TheaterLights();
        PopcornPopper popper = new PopcornPopper();

        HomeTheratorFacade homeTheator = 
                new HomeTheratorFacade(amp, tuner, dvd, cd,
                        projector, screen, lights, popper);
        homeTheator.watchMovie("Radiers of the Lost Ark");
        homeTheator.endMovie();
    }
}

猜你喜欢

转载自blog.csdn.net/MoonShinesOnMyWay/article/details/81358024