外观模式

外观模式提供了一个统一的接口,用来方位子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

类图

这里写图片描述

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 设计模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值