外观模式:提供一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易使用。
简而言之:外观模式目的是让接口更简单。
代码实现:
(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();
}
}