您的位置:首页 > 编程语言 > Java开发

外观模式

2017-04-25 15:59 65 查看
外观模式提供了一个统一的接口,用来方位子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

类图



java代码

// 屏幕
public class Screen {

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

public void up() {
System.out.println("screen up ...");
}
}

// 音响
public class Stereo {

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

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

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

// dvd播放机
public class DVDPlayer {
private String name;

public void on() {
System.out.println("dvd player on ...");
}

public void off() {
System.out.println("dvd player off ...");
}

public void insertDVD(String name) {
this.name = name;
System.out.println("DVD " + name + " insert ...");
}

public void takeDVD() {
this.name = "";
System.out.println("DVD " + name + " take ...");
}
}

// 外观对象
public class EasyUse {

private Screen screen;
private Stereo stereo;
private DVDPlayer dvdPlayer;

public EasyUse(Screen screen, Stereo stereo, DVDPlayer dvdPlayer) {
this.screen = screen;
this.stereo = stereo;
this.dvdPlayer = dvdPlayer;
}

public void on() {
screen.down();
stereo.on();
stereo.setVolume(10);
dvdPlayer.on();
dvdPlayer.insertDVD("XXX DVD");
}

public void off() {
dvdPlayer.takeDVD();
dvdPlayer.off();
stereo.setVolume(0);
stereo.off();
screen.up();
}
}

// 测试对象
public class Test {

public static void main(String[] args) {
new Test().test();
}

private void test() {

// 创建电器对象
Screen screen = new Screen();
Stereo stereo = new Stereo();
DVDPlayer dvdPlayer = new DVDPlayer();

EasyUse easyUse = new EasyUse(screen, stereo, dvdPlayer);
easyUse.on();
easyUse.off();
}
}


注:

现在我们可以很方便的看一场电影,不需要再打开和设置各种电器

提供简化接口的同时,依然将系统完整的功能暴露出来,以供需要的人使用

将客户从组件的子系统中解耦

外观模式需要区别于适配器模式(可参考我的另一篇文章),两者目的不同

外观模式:提供子系统的一个简化接口

适配器模式:伪装接口符合客户的期望

参考文章

1. Head First 设计模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息