[设计模式]外观模式(Facade)

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

1.意图

       为子系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

2.结构与参与者


3.动机

       如果对于顶层的操作不是很关注,那么可以将底层的操作封装,提供一个高层接口来调用底层的操作。就好比程序的编译会包括词法分析,语法分析,语义分析,中间语言生成,目标代码生成与优化。而用户并不在乎底层具体的过程。

       也好比《大话设计模式》中所说的买股票和买基金的区别,买基金就不关心底层具体的买股票操作了。

4.效果

       1)它对客户屏蔽子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。

       2)实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。

松耦合关系使得子系统的组件变化不会影响到它的客户。Façade模式有助于建立层次结构系统,也有助于对对象之间的依赖关系分层。

       在大型软件系统中降低编译依赖性至关重要。在子系统类改变时,喜糖尽量减少虫编译以节省时间。用Façade模式,有利于降低编译依赖性,也有利于在不同平台之间移植,因为编译一个子系统一般不需要编译其他的子系统。

       3)如果应用需要,它并不限制它们使用子系统类。因此你可以在系统易用性和通用性之间加以选择。

5.代码示例

#include<iostream>
#include <string>
using namespace std;

class SubSysOne
{
public:
	void MethodOne()
	{
		cout<<"方法一"<<endl;
	}
};

class SubSysTwo
{
public:
	void MethodTwo()
	{
		cout<<"方法二"<<endl;
	}
};

class SubSysThree
{
public:
	void MethodThree()
	{
		cout<<"方法三"<<endl;
	}
};

//外观类A
class Facade
{
protected:
	SubSysOne* sub1;
	SubSysTwo* sub2;
	SubSysThree* sub3;
public:
	Facade()
	{
		sub1 = new SubSysOne();
		sub2 = new SubSysTwo();
		sub3 = new SubSysThree();
	}
	~Facade()
	{
		delete sub1;
		delete sub2;
		delete sub3;
	}
	
	virtual void FacadeMethod()
	{
		sub1->MethodOne();
		sub2->MethodTwo();
		sub3->MethodThree();
	}
};
//外观类B
class FacadeA:public Facade
{
public:
	FacadeA(){}
	~FacadeA(){}
	virtual void FacadeMethod()
	{
		sub1->MethodOne();
		sub2->MethodTwo();
	}
};
//客户端
int main()
{
	Facade* test = new Facade();
	Facade* testA =new FacadeA();
	cout << "Result of Facade:" <<endl;
	test->FacadeMethod();
	cout << "Result of Facade:" <<endl;
	testA->FacadeMethod();
	return 0;
}


【愚公系列】二十三种设计模式(十)-外观模式(Facade Pattern) 设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。毫无疑问,设计模式对个人、团队和整个系统都带来了显著的益处。它们将代码开发提升到工程化水平,为软件工程构建提供了坚实的基础,就如同大厦的一块块精巧的砖石一样。在项目中明智地应用设计模式可以完美地解决各种复杂问题。 阅读详情

相关推荐

Windows下CMake编译VTK

选择项目INSTALL,生成该项目,得到vtk在Debug模式下的lib和dll文件,在文件夹中可看见,已得到debug模式下lib库与dll库。,把Value值设置为最后在vtk_sln中生成include、dll、lib的位置。在上面点击Configure后,红色区域没有了。选择自己vs编译平台的版本信息,我这边已经设置好了没有这个设置了,借用参考博客的图片。设置完后,点击左下角"Configure",然后等待Configure。,把搜索结果的Value勾选上。在search中搜索。

weixin_74239923的博客 841

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

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

Meteors.的博客 1229

【SAP PO】SAP PO 接口配置完整教程之二REST服务对接

SAP PO 接口配置完整教程之二REST服务对接

XLevon的博客 1万+

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

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

wesigj的博客 2834

DolphinScheduler工作流中ChunJun任务保存失败的深度解析与实战修复

本文深度解析了在DolphinScheduler工作流中创建ChunJun任务时遭遇“parameter invalid”保存失败的普遍问题。其根源在于前端表单的`customConfig`参数默认值与后端校验逻辑不匹配。文章提供了两种实战修复方案:一是修改前端源码并重新编译,二是热更新已部署的JS文件,并对比了其适用场景与风险,帮助用户彻底解决此集成障碍。

weixin_29010003的博客 395

Robot Arm 机械臂源码解析

由于我们用的是步进电机,运动的时候是一步一步的,并不是平滑的,这里假设在一个平面上面,一个x步进电机,一个y步进电机。那么放大它们所走的轨迹就会是阶梯状的。而它们也只能沿着网格运动。相当于有了一个最小的分辨率,这个分辨率就是一步。如下图所示,如果x,y电机同时走就能走出45度的斜线。在三维空间里面运动也是如此,你应该可以想象的出来;首先,是updateActualPosition,用来时时更新此时的差补位置,得到的是一个路径与时间t的函数(其中路径的范围为0,1,时间范围为0,dist/v)...

爱吃炸鸡的小猪's blog 1万+

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

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

scorpio的博客 560

【EtherCAT实践篇一】TwinCAT 3安装、使用

FULL(XAE)安装包:包含了XAR的功能,并能进行多种语言的编程和硬件组态,通常安装在编程电脑上;XAR安装包:包含了ADS的功能,是实时运行环境,对 TwinCAT 模块进行加载、执行、管理、实时运行与调用,通常安装在PLC中;RM安装包:在装了高版本的TwinCAT 3后,发现PLC中的TwinCAT版本较低,就需要安装相应低版本的RM安装包切换版本使用(注:4024无法使用RM安装包切换到低于4022的版本,如4020/4018/4016版本。

JXES智能生态系统 5120

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

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

qq_42896106的博客 330

11、改进的加权轮询调度算法

本文详细介绍了对传统加权轮询(WRR)调度算法的改进方法,包括动态权重调整、优先级调度和预测机制,旨在提升系统的公平性、响应速度和适应性。通过设计与实现改进算法,并结合实验验证其在响应时间、资源利用率和公平性方面的显著提升,同时列举了该算法在数据中心、云服务平台、CDN及电商平台等实际场景中的应用案例。

day7的博客 190

振镜控制卡硬件接口揭秘:XY2-100/SL2-100协议对比

本文对比分析了工业振镜控制领域两种主流数字通信协议XY2-100和SL2-100的硬件接口差异与应用场景。XY2-100作为开放式协议兼容性强,采用LVDS差分信号传输,适用于激光打标等中高精度场景;SL2-100为半封闭协议,采用RS485差分信号,专为高速响应场景设计。文章详细解析了两种协议的引脚定义、通信机制和性能参数,指出XY2-100适配多品牌振镜且调试简单,SL2-100则更适合Nutfield专用设备的高速高精度需求。最后提供了接口调试的实操建议和选型逻辑,强调应根据具体应用场景的精度、速度和

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 638

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

Facade模式,又叫外观模式。它属于结构型设计模式的一种。Facade模式旨在为复杂的子系统提供一个简化的接口,从而隐藏系统的复杂性,使客户端能够更方便地使用系统。 在软件开发中,大型系统通常由多个子系统组成,每个子系统都有自己的一组接口和功能。这些子系统之间的交互可能会变得非常复杂,对于客户端来说,直接与这些子系统进行交互可能会变得困难和繁琐。 外观模式(Facade模式)可以视为面向对象中封装的一种应用。给外界提供清晰明了的使用方式,不用关心内部的复杂逻辑。

金鳞踏雨 948

Fiori Elements Analytical List Page 标题区配置全攻略:从变体、过滤模式到 UI.KPI 的工程化落地

ALP标题区是Fiori Elements Analytical List Page的核心交互区域,承担变体管理、过滤模式切换、KPI展示等关键功能。本文系统解析了标题区的组成结构、可用能力及工程实现要点,包括:1)标题区包含过滤类型切换、全局KPI、变体管理等交互元素;2)详细说明视觉过滤与紧凑过滤的同步规则及实现方式;3)介绍OData V2下通过UI.KPI注解配置标题区KPI的方法;4)提供manifest.json配置示例和CDS注解写法。文章还对比了V2与V4版本的差异,为ALP开发提供实用指导

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 244

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

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

cooldragon的专栏 5662

VC中sqlite的使用

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

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

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

d3y1`5 81_09 757

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

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

小威的博客 2万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

设计模式教程:外观模式(Facade Pattern)

为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用。

遇见伯灵说的博客 1216

C#设计模式读书笔记之外观模式(Facade pattern)

外观模式(Facade pattern)【使用频率:★★★★★】 1. 概述   为复杂的子系统中提供一个统一的入口,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式是迪米特法则的一种具体实现,通过引入一个新的外观角色可以降低原有系统的复杂度,同时降低客户类与子系统的耦合度。 2. 模式中的角色   2.1 外观类(Facade):在外观角色中可以知道相关的(一个或...

qq826364410的专栏 262

设计模式(十一)——外观模式(Facade Pattern)

外观模式(Facade Pattern) 基本介绍 外观模式(Facade),也叫“过程模式,为子系统中的一组接口提供一个一致的入口,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(封装子系统的复杂性,便于客户端调用)。 外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节。 外观模式的UML类图 角色分析 ...

Duktig的博客 428

设计模式之 - 外观模式 (Facade design pattern)

1. 模式意图:  为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更容易使用。 2. 结构 3. 工厂方法模式C#实现 using System; using System.Collections.Generic; using System.Text; namespac

比昂日记 1249

【设计模式】——外观模式(Facade Pattern)

外观模式是一种非常实用的设计模式,特别适用于复杂的系统,通过提供一个简单的接口来减少客户端与子系统之间的耦合。在C++中,通过类的封装和组合,可以很容易地实现外观模式,从而提升代码的可维护性和可扩展性。

J^T的博客 1119

设计模式学习—外观模式(Facade Design Pattern)

一、我的理解 外观模式就像银行柜台的接待员,汇款、存款等操作在后台运行着很复杂的业务逻辑,但是通过接待员,他将后台的这种种复杂的业务逻辑简化为一个个对外的简单方法,比如你说一句“汇款”,调用他的汇款接口,输入相应参数后,他会自己去调用相关业务实现这一功能。相当于向外屏蔽了内部的种种复杂情形。 二、Java实例 其中Shape接口便于统一调用,真正实现外观模式的类是ShapeM

闲鱼的博客 727

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

外观模式 定义 又叫门面模式,提供一个统一的接口,用来访问子系统中的一群接口。 外观模式定义了一个高层接口,让子系统更容易使用,隐藏了子系统的复杂性。 类型 这种类型的设计模式属于结构型模式。 使用场景 子系统越来越复杂,增加外观模式可以提供简单调用接口。 为一个复杂的模块或子系统提供一个外界访问的接口。 子系统相对独立,外界对子系统的访问只要黑箱操作即可。 优点 简化了调用过程,无须了解、...

kaven 4680

【Design Pattern】外观模式 Facade

外观模式

Cpp 439

C++设计模式——外观模式(Facade Pattern)

C++设计模式——外观模式(Facade Pattern) 微信公众号:幼儿园的学霸 目录 文章目录C++设计模式——外观模式(Facade Pattern)目录前言定义定义与特点结构代码示例总结相关设计模式优缺点使用场景参考资料 前言 不得不说,外观模式在开发过程中运用频率非常高,尤其现在各种第三方SDK“充斥”在我们的开发中,这些SDK大多会使用外观模式。通过一个外观类使的整个系统的接口只有一个统一的高层接口,这样能够降低用户的使用成本,也能够对用户屏蔽很多实现细节。外观模式也是我们封装API的常用

leonardohaig的博客 1826

设计模式-外观模式 Facade Pattern

外观模式 Facade Pattern

whf96998的专栏 257
上一篇: [设计模式]代理模式(Proxy)
下一篇: [设计模式]模板方法模式(Template Method)
sicofield
博客等级 码龄18年 169粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值