设计模式详解——外观模式

云中志

共 2112字,需浏览 5分钟

 · 2021-10-16

前言

今天我们来看另一个改变接口的设计模式,不过它改变接口的原因是为了简化接口。这个模式被巧妙地叫做外观模式,之所以这么称呼,是因为它将一个或多个类的复杂的实现都藏在了背后,只显露出一个干净美好的外观。好了,下面我们就来展开分享下。

外观模式

外观模式提供了一个统一的接口,用来访问子系统中的一群接口,它定义了一个高层接口,让子系统更容易使用。下面是外观模式的一个模型图,核心的元素有三个,一个客户端,一个外观模式,另一块是很繁杂的子系统,其中外观模式这一层,主要是简化子系统的接口,为客户端提供更简洁的调用:

要点

  • 当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观模式
  • 实现一个外观模式,需要将子系统组合进外观中,然后将工作委托给子系统执行
  • 外观将客户从一个复杂的子系统中解耦

示例代码

下面我们通过一个很形象的日常生活示例,来说明外观模式具体的应用场景。

我们可以想象这样一个场景:下班回到家,你想看个电影,放松一下,但是你并没有感觉到很开心。因为考虑到要拖地,而且家里水壶还没水了,你还要烧个热水,还有自己找电影,想到这一切的一切,你突然放弃了想看电影的想法。

因为在正常情况下,每一步都要自己亲自操作:首先先打开家里的扫地机器人(这已经算高端了),然后接水烧水,之后才能打开电脑、找电影,整个过程操作完之后,你才能开始看电影,但是这时候你可能会感觉到更加疲惫。

但是假如,突然有一天你的生活开启了外观模式,那整个场景就完全不一样了。这时候回到家,你只需要一键操作,扫地、烧水、找电影都可以一气呵成,这样你就可以直接看自己喜欢的电影了,岂不是美滋滋!

下面我们就来详细看下这个一气呵成的方法,具体如何用代码来实现:

扫地操作

正常情况下,你要自己用扫把扫地,如果是扫地机器人的话,你至少需要启动下开关

public class Broom {
    public void sweepFloor() {
        System.out.println("扫帚正在扫地!");
    }
}
烧水操作

烧水操作也一样,你要用水壶接水,然后烧水

public class Kettle {
    public void boilWater() {
        System.out.println("烧水壶正在接水!");
        System.out.println("烧水壶正在烧水!");
    }
}
搜索电影操作

紧接着你还要自己搜索电影,然后才能开始看电影

public class Computer {
    public void searchVideo() {
        System.out.println("电脑正在查找电影!");
        System.out.println("电脑查找电影完成!");
    }
}
外观模式

但是如果你的生活启用了外观模式,仅需一键操作,就可以完成以上操作,同时开始看电影,感觉这个痛苦的过程一下就消失了呢,是不是一下就感觉美滋滋了呢!

public class SystemFacade {
    Broom broom = new Broom();
    Kettle kettle = new Kettle();
    Computer computer = new Computer();

    public void facade() {
        broom.sweepFloor();
        kettle.boilWater();
        computer.searchVideo();
        System.out.println("开始播放电影!");
    }
}
测试代码

好了,下面就让我们来一键操作吧!

  @Test
    public void testFacade() {
        SystemFacade facade = new SystemFacade();
        facade.facade();
    }

然后我们就可以愉快地看电影了:

和适配器比较

  • 外观模式不只是简化了接口,也将客户从组件的子系统中解耦
  • 外观模式和适配器模式可以包装许多类,但是外观模式的意图是简化接口,而适配器的意图是将接口转换成不同的接口

总结

从上面的示例代码,以及我们举的生活中的例子,我们可以很清楚地看到,外观模式本质上就是整合接口,为客户端提供一个更简洁的接口。现实生活中,外观模式的例子还有很多,特别是在现在这种智能时代,比如小爱同学、小度以及我们的手机智能助手等,都是典型的外观模式。从这一点上来讲,人工智能确实改变了我们的生活,让生活的繁杂开始变得简单,语音搜索、语音控制各类电器……万物互联,真的是指日可待!

好了,关于外观模式我们就说这么多,总体来看这块的内容也确实不过。

- END -


浏览 4
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报