外观模式(Facade Pattern)

外观模式 (Facade Pattern) 外观模式是一种结构型设计模式,它为复杂的子系统提供一个简化的接口。就像酒店的前台一样,客人不需要直接与清洁部、厨房、维修部等各个部门打交道,只需要通过前台就能享受各种服务。外观模式隐藏了系统的复杂性,为客户端提供了一个简单易用的接口。它不会封装子系统,而是提供一个更高层次的接口,使子系统更容易使用。外观模式通过引入一个外观类,将客户端与复杂的子系统解耦。客户端只需要与外观类交互,外观类负责调用相应的子系统完成工作。 外观模式交互示意 🤔 为什么需要外观模式? 📊 问题场景对比 问题场景 不使用 阅读详情

一、简述

Facade 模式将子系统中的各类(或结构与方法)包装成一个简明一致的界面,目的就是想对外部用户隐藏系统、模块和类的复杂性,提供给用户一个简单易用的使用接口,使子系统更加容易使用。它是为子系统中的一组接口所提供的一个一致的界面。Facade模式结构

二、作用及应用场景

1️⃣作用

  1. 松散耦合,外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。
  2. 简单易用,外观模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。
  3. 更好的划分访问层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。

2️⃣应用场景

  1. 为复杂系统提供简单的接口。
  2. 客户程序与抽象类的实现部分分离。
  3. 构建层次系统时,用作入口。
  4. Facade 一个典型应用就是数据库 JDBC 的应用。

三、示例

OrderService 封装了操作 Order 的相关逻辑(增删改查),在目前的系统中运行良好。现在有一个新的需求,外部其他模块(或其他系统)需要查询订单的信息,如果将 OrderService 全部暴露出去,会带来风险,比如其他系统可能会将订单删除。此时可以使用 Facade 模式,只提供客户需要的操作。

URL类图

系统中的已有逻辑类:

public class OrderService {
    public void add(Order order) {
        System.out.println("add order: " + order);
    }
    public void delete(String orderId) {
        System.out.println("delete order: " + orderId);
    }
    public void modify(Order order) {
        System.out.println("modify order: " + order);
    }
    public Order query(String orderId) {
        System.out.println("load order: " + orderId);
        return new Order();
    }
}

提供给外部客户使用的查询类:

public class OrderQueryServiceFacade {
    @Resource
	private OrderService orderService;
	public OrderQueryServiceFacade(OrderService orderService) {
		super();
		this.orderService = orderService;
	}
	/*
	 * 这里是需要暴露的操作,不一定与原接口相同。比如下面的 queryById
	 */
	public Order query(String orderId) {
		return this.orderService.query(orderId);
	}
	public Order queryById(String orderId) {
		return this.query(orderId);
	}
}

这是一个简单的例子,简单到只是隐藏了类的一些操作。更多 Facade 应用场景是隐藏整个系统(模块)的复杂性,对外部提供一个简单的操作界面。
比如,电子商务系统中,商品管理系统,涉及下游其他系统(比如说移动应用)关心的所有信息。移动应用可能仅仅是需要查询某些商品的信息(库存量、描述信息等),如果直接和系统内部交互,复杂不说,也是不安全的,这时候可以单独提供一个商品中心的门面出来(具体实现可以采用:RMI、Hessian 或者 Web Service)。这样下游系统就只需要与这个门面进行交互,而不必关心商品管理系统内部的复杂度了。

【Java设计模式】Java设计模式之(二十二)外观模式(Facade Pattern) 这种类型的设计模式属于结构型模式。 一、组合模式介绍 1.1 含义 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 在日常编码工作中,我们都在有意无意的大量使用外观模式。只要是上层模块需要调度多个子系统(2个以上的类对象),我们都会自觉地创建一个新的类封装这些子系统,提供 阅读详情

相关推荐

YOLOv8环境搭建+训练自己的数据详细项目

直接按照路径会有问题,找到自己 requirements.txt 文件路径,我这里是pip install -r D:\ultralytics-main\ultralytics-main\requirements.txt。首先去自己的anaconda的安装的envs(虚拟环境),在导航栏输入cmd,进入命令窗口。到官方网站下载yolo模型 ,下载好后解压,里面有个文件requirements.txt。然后安装ultralytics ,这是必须的。

m0_63172128的博客 2万+

外观模式(Facade Pattern)

一、定义 外观模式(Facade Pattern):结构型模式之一,提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易使用。 二、UML类图 三、角色职责 外观角色(Facade):提供一个外观接口,对外,它提供一个易于客户端访问的接口,对内,它可以访问子系统中的所有功能。 子系统角色(SubSystem):子系统在整个系统中可以是一个或多个模块,每个模块都有若干类组成,这些类可能相互之间有着比较复杂的关系。 客户端(Client):外观接口调用测试者。 四

奶油芝士蘑菇汤的博客 4000

Agent测试框架Harbor指南

Harbor是一个AI Agent单元测试框架,用于自动化测试AI代理在容器环境中的任务执行能力。它支持18+种AI代理,通过沙箱隔离和自动验证机制评估任务完成情况。任务必须具有可编程验证的输出结果,适合代码、数据、系统等可量化任务,不适合创意写作等主观任务。Harbor采用CLI操作方式,核心架构包含Job管理、Trial执行和验证器三个层级,执行流程包括环境启动、Agent执行和结果验证。任务目录包含指令文件、配置文件、Docker环境定义和测试脚本等必需组件,通过测试脚本自动判断任务完成质量。

loo_Charles_ool的博客 1399

深入理解简单门面模式(Facade Pattern)

简单门面模式是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。门面模式定义了一个高层接口,使得子系统更加易于使用。通过门面模式,客户端代码不需要直接与复杂的子系统交互,而是通过一个简化的接口进行通信。简单门面模式是一种非常有用的结构型设计模式,它为复杂的子系统提供了一个统一的、简化的接口。通过使用门面模式,开发者可以隐藏系统的复杂性,使得客户端代码更加简洁和易于维护。门面模式适用于复杂的子系统、多个子系统、分层结构以及第三方库等场景。

xycxycooo的博客 1154

自然语言处理:稀疏向量表示

稀疏向量表示是指运用特定的方法和技术,将数据(如文本、图像、信号等)转化为向量形式,且该向量具有大部分元素值为零,仅少数元素值非零的特征,以此来实现对数据的高效存储、处理和分析。

老赵爱学习的博客 1443

Python爬虫实战:基于Playwright与异步技术的专利数据抓取系统

专利数据是企业技术创新、市场竞争分析和行业趋势预测的关键情报来源。然而,专利数据通常分散在各个国家的专利局网站,数据结构复杂,反爬机制严格,使得高效抓取成为技术挑战。本文将详细介绍如何构建一个基于最新Python技术的专利数据抓取系统,涵盖Selenium的现代化替代方案Playwright、异步编程、智能代理轮换等高级技术。

2201_76125261的博客 1562

Facade pattern(外观模式)

Facade pattern是外观模式,也叫门面模式,是一种结构型设计模式; 定义:向外部提供了一个统一的接口,用来访问子系统中的一群接口; 适用场景:子系统越来越复杂,增加外观模式提供简单调用接口;构建多层系统结构,利用外观对象作为每层的入口,简化层间调用 特点:解耦,减少系统依赖,客户端不用多个子系统直接交流,而是通过外观对象进行交流;简化了调用过程,无需了解子系统; 外观模式符合迪米特法则,即最少知道原则,客户端不需要知道众多子系统进行交互,只需要和外观对象交互即可; 与外观模式相关的模式对

u011821510的博客 886

android 9.0Settings休眠时间项(屏幕超时)添加永不休眠功能

在9.0的系统产品开发中,系统中默认息屏时间为1分钟,可以通过在Setting中的息屏时间选项设置对应的息屏时间,但是在开发平板类的产品中,需要实现永不休眠的功能,所以需要在Settings中的息屏时间中添加永不休眠时间这一项来实现这个功能,接下来看息屏时间的相关功能,来添加这个功能

安卓兼职framework和app工程师的博客 2056

二十三种设计模式全面解析-外观模式(Facade Pattern)详解:简化复杂系统的奇妙之道

外观模式是一种结构型设计模式,它提供了一个统一的接口(外观)来访问复杂系统的子系统集合。通过外观模式,我们可以隐藏系统的复杂性,并提供一个简洁的接口供客户端使用。当一个系统由多个子系统组成,并且客户端需要通过不同的接口与这些子系统进行交互时,外观模式可以将这些交互整合在一个统一的接口中,方便客户端的使用。外观类(Facade):外观类是外观模式的核心,它提供了一个简洁的接口给客户端,隐藏了系统的复杂性。子系统类(Subsystem):子系统类是外观模式中的组成部分,它实现了系统的具体功能。

w风雨无阻w的专栏 480

基于matlab的LFM脉冲压缩仿真

传统雷达测距是通过发射点频脉冲串实现的,通过发射脉冲与回波的时延确定目标的距离。此类方法易于实现,对接收机的要求较低。一般要获取更好的距离分辨力,需要增加发射信号的带宽,对于点频脉冲信号即需要减小发射脉冲宽度;而为获取更大的探测距离,提升雷达威力,则需要发射更大占空比的脉冲串。由于点频信号的时宽带宽积约等于1,因此不能同时增加信号的时宽和带宽。若要保持距离分辨力,增大占空比就需要减少雷达的脉冲重复周期(PRT)。这样会减小雷达的无模糊探测距离,也会造成目标回波频繁被遮挡,损失雷达威力。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 1770

裸眼3D技术发展与应用前景

这项技术利用传感器或摄像头实时监测观众的位置和视角,然后根据观众的位置信息动态调整投射的图像,确保不同位置的观众都能看到一致的3D效果。这种技术不仅可以在电影院和家庭影院中应用,还可以用于虚拟现实设备和大型展览等领域。裸眼3D呈现是一种不需要佩戴任何特殊设备(如3D眼镜或头盔)即可观看到3D效果的技术。这种技术近年来得到了快速发展,为观众带来了更加沉浸式的视觉体验。总之,裸眼3D呈现技术的发展为观众带来了更加真实、沉浸式的视觉体验。随着技术的不断进步和创新,相信未来裸眼3D将会在更多领域得到应用和推广。

学无止境 1992

23种设计模式之外观模式(Facade Pattern)

本篇文章将23种设计模式中的外观模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识

小威的博客 2万+

【100%通过率】2023华为od机试C卷【电脑病毒感染】C++ 实现

一个局域网内有很多台电脑,分别标注为 0 ~ N-1 的数字。相连接的电脑距离不一样,所以感染时间不一样,感染时间用t 表示。其中网络内一台电脑被病毒感染,求其感染网络内所有的电脑最少需要多长时间。如果最后有电脑不会感染,则返回-1.

MISAYAONE的博客 1726

Facade Pattern外观模式

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 举个例子,比如我们最习以为常吃饭,如果是自己做的话,那么需要经历买菜、洗菜、切菜、炒菜、吃、善后工作等,这几个顺序是肯定不能乱的,而且缺一不可。刚上了一天的班想吃个饭还要这么麻烦,想想就累。那么怎么解决呢?简单的做法...

qq_37254296的博客 209

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

PHP中的facade pattern(外观模式)

本文来自pilishen.com----原文链接 该篇属于《Laravel底层核心技术实战揭秘》这一课程《laravel底层核心概念解析》这一章的扩展阅读。考虑到学员们的基础差异,为了避免视频当中过于详细而连篇累牍,故将一些laravel底层实现相关的PHP知识点以文章形式呈现,供大家预...

chengkuangmu1012的博客 234

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

23种设计模式——外观模式(Facade Pattern)详解

本文介绍了23种设计模式之——外观模式(Facade Pattern)的说明及使用

Meteors.的博客 1229

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

设计模式-09外观模式Facade Pattern

外观模式是一种简化复杂系统访问的结构型设计模式,它通过提供一个统一的高层接口来隐藏子系统内部的复杂性。该模式适用于需要为复杂系统提供简化接口、降低客户端与子系统耦合度的场景。文章通过计算机启动示例展示了经典外观模式的实现,包含CPU、内存和硬盘等子系统的封装,对比了使用外观模式前后客户端代码的复杂度差异。此外还介绍了分层外观模式在数据层和业务逻辑层的应用示例。外观模式能显著提高代码可维护性和易用性,是处理复杂系统交互的有效解决方案。

d3y1`5 81_09 757

外观模式-Facade Pattern

在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。 软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观...

心猿意碼 6445

Java设计模式——外观模式【Facade Pattern】

Java设计模式、外观模式、Facade Pattern

scorpio的博客 560

Facade Pattern 外观模式

模式思想 在介绍该模式之前,我们先来看一个生活中的案例。当你下班回家后,需要把家里的电器一个一个依次打开,开电视、开空调、开灯……,而当你准备出门上班时,又要把之前打开的电器一个一个依次关掉,关电视、关空调、关灯……。这样家里电器一多以后,每次开开关关是很麻烦的。那么我们就会想如果有一个万能开关,可以直接一次性控制家中全部电器的开关。这样是不是就方便很多了?每次回家或者上班出门,只需按一下万能开关就可以完成之前的多次开关操作了 利用我们在现实世界获得的指引,将其运用于软件工程领域下,即提炼为我们今天所要介.

weixin_40955388的博客 321

C++ 设计模式 外观模式 The Facade Pattern

Facade Pattern 为一组复杂的子系统提供了一个统一的简单接口,它是一种结构型设计模式。它隐藏了子系统的复杂性,并向客户端提供了一个简单的接口来访问子系统。通过使用 Facade 模式,客户端可以方便地使用子系统,而不必了解子系统的内部细节。在 C++ 中,Facade 模式可以使用继承和组合的方式实现。Facade 类可以继承自 Subsystem 类,也可以包含一个 Subsystem 类的对象。

qq_42896106的博客 330

设计模式-外观模式-Facade Pattern

例如,在Java微服务项目中,外观模式可以用于代码分层,其中Facade作为对外暴露API接口的一层,Controller作为API的实现类,Service为核心业务服务。在这些语言中,外观模式的实现方式可能会有所不同,但核心思想是一致的:提供一个高级的接口,简化对子系统的操作。这种模式隐藏了子系统的细节,使得客户端代码可以通过一个简单的接口来访问子系统的功能,从而降低了客户端与复杂子系统之间的耦合度。外观模式是一个强大的工具,可以帮助简化复杂系统的接口,但也应该谨慎使用,以避免引入不必要的抽象层次。

wesigj的博客 2834

外观模式 Facade Pattern

外观模式 Facade Pattern简介:优点:缺点:结构:例子及代码:小龙虾类:生蚝类:铁板鱿鱼类:美食街类(外观类):main函数及调用:最终结果:写在最后: 简介: 外观模式很简单,哪怕你没学过,你在工作中也用过,它就是对一个系统中的多个类里的接口进行了一层封装。 优点: 遵从了迪米特法则,即最少知道原则,你用户不用也无需知道那么多,我给你提供最简单接口,你调用就行。并且使得代码看起来简洁、结构明确、易读。 缺点: 违背了开闭原则,就是说如果子系统需要添加新类,那么需要修改封装类Facade。 结构

diezhongbing1358的博客 230

外观模式Facade Pattern

外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面。

Resurgence03的博客 218

【大道模式】外观模式-Facade Pattern

当你的系统需要分层设计 或者 需要在子系统和客户端之间建立一个高层接口使得子系统更容易复用时,就需要考虑使用外观模式了。 基本介绍: 1.外观模式(Facade),也叫"过程模式":外观模式为子系统中的一组接口提供一个一致(稳定)的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(复用)。 2.外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节。 3.当系统需要进行分层设计时,可以考虑Facade模式。...

懂幸福,爱生活 454

设计模式总结之Facade Pattern(外观模式)

Facade Pattern(外观模式) 意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 适用性 * 当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性, 也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带

cooldragon的专栏 5662
上一篇: 使用JDBC连接数据库
下一篇: 顶级父类java.lang.Object的九个方法
JFS_Study
博客等级 码龄6年 363粉丝 359原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JFS_Study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值