当前位置: 首页 >  网技达人 >  软件设计模式系列之十二——外观模式

软件设计模式系列之十二——外观模式

导读:在软件设计中,经常会遇到需要与复杂子系统进行交互的情况。为了简化客户端与子系统之间的交互,提高系统的可维护性和可用性,外观模式应运而生。外观模式(Facade.Pattern)是一种结构型设计模式,它提供一个统一的界面,用于访问系统中的一组相关接口,从而隐藏了系统的复杂性。在本文

在软件设计中,经常会遇到需要与复杂子系统进行交互的情况。为了简化客户端与子系统之间的交互,提高系统的可维护性和可用性,外观模式应运而生。外观模式(Facade Pattern)是一种结构型设计模式,它提供一个统一的界面,用于访问系统中的一组相关接口,从而隐藏了系统的复杂性。在本文中,我们将深入探讨外观模式,包括其定义、举例说明、结构、实现步骤、代码实现(使用Java语言)、典型应用场景、优缺点、类似模式以及最后的小结。

1 模式的定义

外观模式是一种结构型设计模式,它提供了一个简化的接口,用于访问系统中的一组相关接口,以隐藏系统的复杂性。外观模式的主要目标是简化客户端与子系统之间的交互,同时降低了系统的耦合度。它允许客户端通过一个统一的入口点来与系统进行通信,而不需要了解系统内部的具体细节和复杂性。

2 举例说明

让我们通过几个简单的例子来说明外观模式的概念。
音响系统的例子。假设我们正在开发一个音响系统,该系统包括音响控制、CD播放器、收音机和音箱等组件。客户端希望能够简单地控制音响的各种功能,而不需要直接与每个组件进行交互。

智能手机的例子。智能手机的操作系统(如iOS和Android)为用户提供了一个外观,通过该外观可以轻松访问手机的各种功能,包括拨打电话、发送短信、浏览互联网、使用应用程序等。用户不需要了解手机的硬件和操作系统内部的复杂性。

家用电器的例子。一些现代家用电器,如洗衣机、洗碗机和微波炉,配备了控制面板,通过该面板用户可以选择不同的功能和设置。这些控制面板提供了一个简化的外观,使用户能够轻松操作家用电器。

汽车的驾驶控制台的例子。现代汽车的驾驶控制台包括了一系列按钮、开关和显示屏,通过这些控制界面,驾驶员可以控制汽车的各种功能,如调整座位、开启空调、切换收音机频道、导航、调整车速等。这些控制界面提供了一个简化的外观,使驾驶员能够方便地控制汽车。

3 结构

外观模式的结构包括以下主要组件:

外观(Facade):外观是外观模式的核心组件,它提供了一个简化的接口,用于与系统中的一组相关接口进行交互。外观负责委派请求给相应的子系统对象。

子系统(Subsystems):子系统是系统中的各个组件或模块,它们实现了系统的具体功能。外观通过与子系统协作来完成客户端的请求。

客户端(Client):客户端是使用外观模式的类或模块,它通过外观来简化与系统的交互。客户端不需要直接与子系统的具体类进行通信。

4 实现步骤

要实现外观模式,可以按照以下步骤进行操作:

定义子系统:首先,定义系统中的各个子系统,每个子系统负责实现一部分功能。

创建外观类:创建一个外观类,它包含对子系统的引用,并提供一个简化的接口,用于客户端访问系统的功能。

在外观类中委派请求:在外观类中实现方法,将客户端的请求委派给适当的子系统对象,以完成具体的操作。

客户端使用外观类:客户端通过外观类来访问系统的功能,而不需要直接与子系统的具体类进行交互。

5 代码实现

让我们使用Java代码来实现上面的音响系统的外观模式:

首先,我们创建外观类 StereoFacade:

public class StereoFacade {
    private StereoControl stereoControl;
    private CDPlayer cdPlayer;
    private Radio radio;
    private Speakers speakers;

    public StereoFacade() {
        stereoControl = new StereoControl();
        cdPlayer = new CDPlayer();
        radio = new Radio();
        speakers = new Speakers();
    }

    public void playMusic() {
        stereoControl.turnOn();
        cdPlayer.play();
        radio.tune();
        speakers.volumeUp();
    }

    public void turnOff() {
        stereoControl.turnOff();
        cdPlayer.stop();
        radio.turnOff();
        speakers.volumeDown();
    }
}

接下来,我们可以在客户端使用外观类:

public class ClientWithFacade {
    public static void main(String[] args) {
        StereoFacade stereoFacade = new StereoFacade();

        // 使用外观模式简化操作
        stereoFacade.playMusic();

        // 关闭音响
        stereoFacade.turnOff();
    }
}

通过外观模式,客户端只需与 `外观类 StereoFacade 交互,而不需要了解音响系统的具体子系统。这大大简化了客户端的代码,并提高了系统的可维护性和可用性。

6 典型应用场景

外观模式通常在以下情况下得到广泛应用:

简化复杂系统。当系统包含多个复杂的子系统或模块,并且客户端需要与这些子系统进行交互时,外观模式可以提供一个简化的接口,以减少客户端的复杂性。

解耦客户端与子系统。外观模式允许客户端与系统的具体实现解耦,使得系统的更改不会影响到客户端。

提供高层接口。外观模式可以为系统提供一个高层接口,隐藏底层组件的复杂性,使客户端更容易使用。

构建库或框架。在设计库或框架时,外观模式可以提供一个简单的接口,以便其他开发者能够轻松使用库中的功能。

7 优缺点

外观模式具有一些优点和缺点,让我们来看看:

优点:

简化接口:外观模式提供了一个简化的接口,使客户端更容易使用系统的功能。

降低耦合度:外观模式将客户端与子系统的具体实现解耦,允许系统的更改不会影响到客户端。

提高可维护性:由于外观模式隐藏了系统的复杂性,因此提高了系统的可维护性,减少了维护成本。

提供了更高层次的接口:外观模式允许为系统提供高层次的接口,有助于组织和管理复杂的代码。

缺点:

不符合开闭原则:如果系统的功能需要变化或扩展,可能需要修改外观类,这可能会违反开闭原则。

可能引入单点故障:外观模式将多个子系统封装在一个外观类中,如果外观类发生故障,整个系统可能会受到影响。

8 类似模式

与外观模式类似的模式包括以下几种,它们都涉及到简化复杂系统的接口或交互,但在目的和实现上略有不同。

适配器模式(Adapter Pattern)

适配器模式和外观模式都是结构型设计模式,它们都涉及到简化接口或交互,以便客户端能够更容易地使用系统的功能。适配器模式通常用于解决接口不兼容的问题,将一个接口转换为另一个接口。外观模式用于提供一个统一的界面,隐藏系统的复杂性,使客户端更容易使用。

代理模式(Proxy Pattern)

代理模式和外观模式都涉及到一个对象(代理或外观)充当客户端与系统之间的中介,以控制访问系统的功能。代理模式主要用于控制访问对象,通常包括延迟加载、访问控制或监控。外观模式主要用于简化客户端与系统的交互,隐藏系统的复杂性。

装饰模式(Decorator Pattern)

装饰模式和外观模式都是结构型设计模式,它们都涉及到对象的包装和功能扩展。装饰模式允许在运行时动态地添加功能,而不改变对象的接口。外观模式提供一个统一的接口,用于访问系统的一组相关接口,目的是隐藏系统的复杂性。

这些模式都与简化系统的接口或交互有关,但它们的重点和用途略有不同。在实际应用中,应根据具体问题和需求选择最合适的设计模式。

9 小结

外观模式是一种有助于简化复杂系统的结构型设计模式。它提供了一个统一的界面,用于访问系统中的一组相关接口,从而隐藏了系统的复杂性。通过外观模式,客户端可以更轻松地与系统进行交互,而不需要了解系统内部的具体细节。这种模式提高了系统的可维护性、可用性,并降低了客户端的复杂性。在设计和开发复杂系统时,外观模式可以成为一个有用的工具,以提高代码的可维护性和可扩展性。

内容
  • RocketMQ消费者是如何负载均衡的
    RocketMQ消费者是如何负载
    2023-12-09
    摘要:RocketMQ 支持两种消息模式:集群消费( Clustering )和广播消费( Broadcasting )
  • 一种新的告警收敛方式“先知预警”,为您的系统健康护航
    一种新的告警收敛方式“先知预警”
    2023-12-08
    前言.简介.买基金,上京东.基金交易系统是用户使用京东金融APP进行基金交易的核心支撑系统,每天有数十亿元的交易额。.在
  • 读发布!设计与部署稳定的分布式系统(第2版)笔记26_安全性上
    读发布!设计与部署稳定的分布式系
    2023-12-07
    1. 安全问题.1.1. 系统违规并不总是涉及数据获取,有时会出现植入假数据,例如假身份或假运输文件.1.2. 必须在整
  • SSH教程0简介
    SSH教程0简介
    2023-12-06
    0 简介.OpenSSH (http://www.OpenSSH.com).已成为远程管理UNIX类系统和许多网络设备的
  • 安全测试前置实践1-白盒&黑盒扫描
    安全测试前置实践1-白盒&黑盒扫
    2023-12-04
    作者:京东物流 陈维.一、引言.G.J.Myers在《软件测试的艺术》中提出:从心理学角度来说,测试是一个为了寻找错误而
  • 密评相关要求介绍
    密评相关要求介绍
    2023-12-04
    密评相关要求介绍.项目建设单位需从物理和环境安全、网络和通信安全、设备和计算安全、应用和数据安全等四个层面采用密码技术措
  • 学系统集成项目管理工程师(中项)系列06a_信息系统安全管理(上)
    学系统集成项目管理工程师(中项)
    2023-12-04
    1. 信息安全.1.1. 保护信息的保密性、完整性、可用性.1.2. 另外也包括其他属性,如:真实性、可核查性、不可抵赖
  • FlashDuty Changelog 2023-09-07 | 新增深色模式与主题配置
    FlashDuty Change
    2023-12-04
    FlashDuty:一站式告警响应平台,前往此地址免费体验!.FlashDuty.现在已经全面支持了深色模式,这为您提供
  • 汽车ECU软件开发之应用层软件与底层软件
    汽车ECU软件开发之应用层软件与
    2023-12-03
    随着汽车产品日渐趋向电子化,人们对各类先进的安全系统、高级驾驶辅助系统的接受程度日益提升。而原本昂贵的盲点检测、自动紧急
  • 工业镜头篇之镜头焦距
    工业镜头篇之镜头焦距
    2023-12-03
    目录.图像采集系统.镜头等效分析.高斯光学公式.确定镜头焦距.凸透镜的球差.对焦和变焦.参考资料.图像采集系统.镜头等效
  • 智慧园区楼宇合集 | 图扑数字孪生管控系统
    智慧园区楼宇合集 | 图扑数字孪
    2023-12-03
    智慧园区是指将物联网、大数据、人工智能等技术应用于传统建筑和基础设施,以实现对园区的全面监控、管理和服务的一种建筑形态。
  • 1.5 编写自定位ShellCode弹窗
    1.5 编写自定位ShellCo
    2023-12-02
    在笔者上一篇文章中简单的介绍了如何运用汇编语言编写一段弹窗代码,虽然简易ShellCode可以被正常执行,但却存在很多问
  • 主动发现系统稳定性缺陷:混沌工程
    主动发现系统稳定性缺陷:混沌工程
    2023-12-01
    这是一篇较为详细的混沌工程调研报告,包含了背景,现状,京东混沌工程实践,希望帮助大家更好的了解到混沌工程技术,通过混沌工
  • 基于深度学习的口罩检测系统(Python+清新界面+数据集)
    基于深度学习的口罩检测系统(Py
    2023-12-01
    摘要:口罩检测系统用于日常生活中检测行人是否规范佩戴口罩,利用深度学习算法可实现图片、视频、连接摄像头等方式的口罩检测,
  • 园林绿化养护服务
    园林绿化养护服务
    2024-01-10
    园林绿化养护服务.产品功能.园林绿化养护服务是一项专业的服务,旨在为客户提供全方位的园林绿化管理和养护服务。我们团队的专
  • 园林景观设计
    园林景观设计
    2023-12-11
    园林景观设计产品介绍.产品功能.园林景观设计是一项专业的设计服务,主要用于规划和设计公共和私人的园林空间。其功能包括根据
  • 绿化工程材料供应
    绿化工程材料供应
    2023-12-16
    绿化工程材料供应.产品功能.我们的绿化工程材料供应主要用于城市绿化、园林景观建设、庭院绿化等相关项目。产品种类丰富,覆盖
  • 城市绿化规划设计
    城市绿化规划设计
    2024-01-15
    城市绿化规划设计.随着城市化进程的不断加快,城市绿化规划设计成为了一个备受关注的问题。如何在城市中保护和增加绿地,促进城
  • 喷泉景观设计
    喷泉景观设计
    2024-01-05
    喷泉景观设计.喷泉是一种极具观赏性和装饰性的景观设计元素,它不仅可以为周围的环境增添一份生气与动感,更可以为人们带来一份
  • 公园景观规划设计
    公园景观规划设计
    2024-01-10
    公园景观规划设计.产品功能.我们的公园景观规划设计产品旨在为城市和乡村地区提供高质量的公共休闲空间。我们致力于通过规划和
  • 园林休闲座椅制作
    园林休闲座椅制作
    2024-01-20
    园林休闲座椅制作.产品功能.园林休闲座椅是专门为户外休闲空间设计制作的座椅产品。产品具有耐候性强、外观美观、舒适度高等特
  • 喷泉设计与安装
    喷泉设计与安装
    2023-12-21
    喷泉设计与安装.喷泉是园林景观中不可或缺的元素之一,无论是在公园、**还是私人花园中,喷泉都能为环境增添灵动的气息,成为
  • 室外园林景观配套设施制作
    室外园林景观配套设施制作
    2024-01-15
    室外园林景观配套设施制作.产品功能.我们的室外园林景观配套设施制作主要提供定制化的户外景观配套设施,包括花池、凉亭、栏杆
  • 景观照明工程
    景观照明工程
    2023-12-16
    景观照明工程.产品功能.景观照明工程是一种专门为户外景观设计的照明方案。它既可以美化城市风景,提升城市形象,也可以为人们