C++设计模式——门面模式(Facade)

C++设计模式——门面模式(facade pattern) 一、原理讲解 门面模式也叫做外观模式,实质就是一个封装接口,通常是将一类功能或者一个层次功能用一个函数封装起来,供客户端统一调用。 1.1意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个借口使得这一子系统更加容易使用。 1.2应用场景 当你要为一个复杂子系统提供一个简单接口时; 客户程序与抽象类的实现部分之间存在着很大依赖性; 当你需要构建一个层次的子系统时,使用Facade模式定义子系统中每层的入口点; 1.3结构图(UML图) 1.4代码实现步骤 a1 定义一 阅读详情

定义

门面模式是比较常用的一种设计模式,在 GoF 《设计模式》书中,门面模式是这样定义的:
门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。

门面模式也有的书叫外观模式, 它提供一个高层次的接口,让子系统更易于使用。门面模式用一个门面类来处理子系统的复杂关系,门面类提供简单的Api接口供客户端调用。

高内聚,松耦合。安全。

优点

减少系统的相互依赖
提高了灵活性
提高安全性

适用场景

解决易用性问题。为访问一系列复杂的子系统提供一个统一的、简单的入口,可以使用外观模式;
客户端与多个子系统之间存在很大依赖,但在客户端编程,又会增加系统耦合度,且使客户端编程复杂,可以使用外观模式。

角色

Facade(外观角色):外观角色可以知道多个相关子系统的功能,它将所有从客户端发来的请求委派给相应的子系统,传递给相应的子系统处理。
SubSystem(子系统角色):子系统是一个类,或者由多个类组成的类的集合,它实现子系统具体的功能。 

 

代码示例


class ILetterProcess
{
public:
    ILetterProcess(void);
    virtual ~ILetterProcess(void);
    virtual void WriteContext(string context) = 0;
    virtual void FillEnvelope(string address) = 0;
    virtual void LetterIntoEnvelope() = 0;
    virtual void SendLetter() = 0;
};

 
class CLetterProcessImpl :  public ILetterProcess
{
public:
    CLetterProcessImpl(void);
    ~CLetterProcessImpl(void);

    void WriteContext(string context)    { cout << "填写信的内容... ..." << endl;}
    void FillEnvelope(string address)    { cout << "填写收件人地址及姓名... ..." << endl;}
    void LetterIntoEnvelope()     { cout << "把信放到信封中..." << endl;}
    void SendLetter()      { cout << "邮递信件..." << endl; }
};

 
class CModenPostOffice
{
public:
    CModenPostOffice(void){
         this->m_pLetterProcess = new CLetterProcessImpl();
         this->m_pLetterPolice = new CLetterPolice();
    }
    ~CModenPostOffice(void){
         delete m_pLetterProcess;
         delete m_pLetterPolice;
    } 
    void SendLetter(string context, string address){
          m_pLetterProcess->WriteContext(context);
          m_pLetterProcess->FillEnvelope(address);
          m_pLetterPolice->CheckLetter(m_pLetterProcess);
          m_pLetterProcess->LetterIntoEnvelope();
          m_pLetterProcess->SendLetter();
    }
private:
    ILetterProcess *m_pLetterProcess;
    CLetterPolice *m_pLetterPolice;
};

 

void DoItByPostOffice()
{
    CModenPostOffice modenPostOffice;  //Facade
    string context = "Hello, It's me, do you know who I am? I'm your old lover. I'd like to ... ...";
    string address = "Happy Road No. 666, Beijing City, China";
    modenPostOffice.SendLetter(context, address);
}
void DoItMyself()
{
    ILetterProcess *pLetterProcess = new CLetterProcessImpl();
    pLetterProcess->WriteContext("Hello, It's me, do you know who I am? I'm your old lover. I'd like to ... ...");
    pLetterProcess->FillEnvelope("Happy Road No. 666, Beijing City, China");
    pLetterProcess->LetterIntoEnvelope();
    pLetterProcess->SendLetter();
    delete pLetterProcess;
}


int _tmain(int argc, _TCHAR* argv[])
{
    DoItByPostOffice();   //使用门面模式包装复杂的逻辑,方便子系统调用
    DoItMyself();

    return 0;
}

Facade类提供简单的接口给用户调用,其内部处理复杂的调用

应用

Socket是个典型的⻔面模式,它接口内部处理复杂的TCP/IP协议族调用,为用户提供一套各个跨平台的统一的简单的调用接口,让Socket去组织数据,以符合指定的协议。Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是⼀组接口。

C++设计模式——Facade外观模式 设计模式学习 阅读详情

相关推荐

C++设计模式_14_Facade门面模式

为子系统中的一组接口提供一个一致(稳定)的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(复用)。----《设计模式》 GoF从客户程序的角度来看,Facade模式简化了整个组件系统的接口,对于组件内部与外部客户程序来说,达到了一种“解耦”的效果一一内部子系统的任何变化不会影响到Facade接口的变化。Facade设计模式更注重从架构的层次去看整个系统,而不是单个类的层次。Facade很多时候更是一种架构设计模式。

分享学习成长历程,Winter is coming! 449

【C++设计模式】4.12-门面/外观模式(Facaded)

C++ 23种设计模式之门面/外观模式(Facade)。

luonong9586的博客 454

C++设计模式课件14_Facade_门面模式.pdf

C++设计模式课件14_Facade_门面模式.pdf

[C++实现 设计模式(14)] : 门面模式

文章目录情景描述*参考书籍* : 情景描述 大家都写过纸质信件吧 , 写信大致分为四个步骤 : 先写信件的内容 , 然后写信封 , 再把信放到信封中 , 投递到信箱中进行邮递 . 如图所示 : 代码实现也非常的简单 : #include<iostream> #include<string> //#include<vld.h> using namespace s...

Nonpc的博客 2350

Mendix 开发实践指南|Mendix平台概览

低代码开发是一种将编码从文本形式转变为视觉形式的应用开发方法。它提供了一个模型驱动的、拖放式的界面,而不是传统的编码环境,使得各种技能水平的开发者——包括专业开发人员、新手、主题专家、业务利益相关者和决策者——都能使用低代码工具来构建驱动价值的企业业务应用。低代码的核心在于提高开发的可访问性和效率,让更多人能够参与到应用开发中来​​。Mendix适用于多种应用场景,包括企业级应用、移动应用、物联网(IoT)应用和微服务架构等。

多年搬砖的经验分享... 4413

已解决-Parallels Desktop 16 网络初始化失败:您的虚拟机将继续正常运作,但将无法连接网络

我是月球挖掘机,相信不少打工人为了尝鲜已经更新了MacOS 11 Big Sur,当然,苹果每次的系统大更新,都会给我们软件的功能无法使用惊喜,这次的也不例外。 这个问题是我在更新macOS Big Sur之后,Parallels Desktop打开虚拟机后,提示: 报错信息 网络初始化失败:您的虚拟机将继续正常运作,但将无法连接网络 这是我的软件版本: 起初我以为是我的虚拟机坏了,结果重装了一遍虚拟机,没有任何用处。我开始在网上找方法,只能找到那个使用命令行打开软件的命令,除此之外没有了

月球挖掘机 5万+

【设计模式】结构型模式-门面模式(Facade Pattern)

门面模式(Facade Pattern)是一种结构型设计模式,旨在为复杂的子系统提供一个统一的、更高层次的接口,使得子系统更易使用。以下是用 C++ 实现的详细说明和示例:

weixin_43510208的博客 481

Dify与钉钉轻量级集成:打造企业内部AI助手

企业级聊天机器人开发已成为提升内部协同效率的关键技术。其核心原理在于通过API集成,将AI模型能力与即时通讯平台无缝连接,实现智能问答与自动化流程。从技术价值看,这种集成方案能够显著降低AI应用落地门槛,将前沿的AI能力快速转化为实际生产力。在应用场景上,它尤其适用于HR答疑、IT技术支持、产品知识库等高频内部服务场景。本文聚焦于Dify与钉钉的轻量级集成方案,通过Stream模式实现高效消息处理,并利用AI卡片支持流式输出,为企业构建体验自然的智能机器人提供了完整实践路径。该方案特别强调配置简化与部署便捷

weixin_27155667的博客 698

C++ 设计模式:门面模式(Facade Pattern)

C++ 设计模式:门面模式(Facade Pattern)

冀晓武的博客 773

【已解决】Claude应用地区限制问题:通过Slack注册与魔法节点切换实战指南

本文详细介绍了如何通过Slack注册和切换魔法节点解决Claude应用地区限制问题。从Slack账号注册、创建工作区技巧,到突破地区限制的关键步骤和成功后的配置使用,提供了全面的实战指南。特别强调了节点选择和网络环境对解决'App unavailable'错误的重要性,帮助用户顺利使用Claude AI助手。

weixin_29209801的博客 1766

RK3588,V4l2 读取Gmsl相机, Rga yuv422转换rgb (dma), 实现零拷贝

RK3588, 使用V4l2 读取 gmsl 相机,获得yuv422格式图像, 使用 rga 转换 rgb 图像。减少cpu占用率. 内存管理方式采用 dma,实现零拷贝.

J。 1262

【GeekBand】C++设计模式笔记14_Facade_门面模式

【GeekBand】C++设计模式笔记14_Facade_门面模式

qq_38154295的博客 367

YOLOv11 模型改进:利用新型损失函数实现精度跃升(含代码全解析)

在目标检测领域,损失函数的选择直接决定模型的精度上限。某自动驾驶公司将 YOLOv11 原有损失替换为新型损失后,障碍物检测 mAP 提升 10%,夜间场景误检率降低 22%;某物流分拣项目中,采用新损失的 YOLOv11 模型对小包裹的识别准确率从 82% 升至 96%。如果你也在为模型精度瓶颈、样本不平衡问题困扰,这篇教程将带你掌握 YOLOv11 损失函数的进阶技巧,真正帮你在检测性能上实现突破。损失函数是模型训练的“指南针”,它定义了模型“学习的方向”。传统损失(如 BCE、Focal Loss)在

m0_71589036的博客 714

C++实现设计模式——门面(Facade)模式

C++实现设计模式——门面(Facade)模式 Facade模式定义 (Facade)门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面(Facade)对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。 Facade模式例子 日常生活中其实很多地方都用到了门面模式的思想: 比如包工头,他担任的就是一个门面角色,他的出现不需要我们再去个木匠,瓦匠,油漆匠打交道,我们只需要和他进行对接。 再比如现在的很多接待员,我们和接待员打交道,然后接待员再去和对应的部门进行沟通。 这些都是

yxh_1_的博客 249

Coze 打通飞书多维表格,实现数据增删改查操作实战详解

基于Coze 打通飞书多维表实现数据录入系统实战详解

congge 5781

YOLOv12改进策略【模型轻量化】| 替换骨干网络为EfficientNet v1 高效的移动倒置瓶颈结构

本文记录的是基于。采用了创新性的方法,通过精心平衡网络和来提升性能。本文将的设计优势融入YOLOv12中,提升YOLOv12的性能与效率,使其在目标检测任务中表现更为出色。本文配置了原模型中的共种不同大小的模型结构,以满足不同的需求。

Limiiiing的博客 964

C++设计模式 - 门面模式(Facade)

接口隔离模式 在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题、甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口是一种常见的解决方案。 典型模式 Facade Proxy Adapter Mediator Facade 系统间耦合的复杂度 动机(Motivation) 上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。 如何简化外部客户程序和系统间的交互接口?如何将外部客

Cdreamfly的博客 396

VC中sqlite的使用

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

【Facade模式】C++设计模式——外观模式(门面模式)

C++外观模式(门面模式),Facade模式,本文用简单的举例与对比分析介绍门面模式,并加以使用代码阐述该模式

不负AC不负卿的博客 761

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C++设计模式之门面模式(接口隔离)(Facade)

C++设计模式之门面模式.(接口隔离)(Facade) 1、序论 ​ 在组件构建的过程中,某些接口之间的依赖常常会带来很多的问题、甚至根本无法去实现。采用添加一层间接的稳定接口,来隔离本来相互紧密关联的接口是一种常见的解决方案。 ​ 如何简化外部客户程序和系统之间的交互接口?如何将外部客户程序的演化和内部的子系统的变化之间的依赖相互解耦? 模式的定义: ​ 为子系统中一组接口提供一个一致稳定的界面Dacede模式定义了一个高层的接口,这个接口使得这一子系统更加的容易使用(复用). 2、门面模式的结构类

qq_46087622的博客 236

C++设计模式-Facade 门面模式

为子系统中的一组接口提供一个一致(稳定)的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(复用)。从客户程序角度来看,Façade模式简化了整个组件系统的接口,对于组件内部与外部的客户程序来说,达到了一种”解耦“的效果——内部子系统的任何变化不会影响到Façade接口的变化。Façade设计模式更注重架构的层次去看整个系统,而不是单个类的层次。Façade很多时候是一种架构设计模式。Façade设计模式并非一个集装箱,可以任意地放进任何多个对象。

m0_52329237的博客 443

设计模式之门面模式(Facade)的C++实现

门面模式(Facade)的C++实现。在组件的开发过程中,某些接口之间的依赖是比较紧密的,如果某个接口发生变化,其他的接口也会跟着发生变化,这样的代码违背了代码的设计原则。门面设计模式是在外部客户程序和系统程序之间添加了一层中间接口,使依赖的接口之间相互解耦。有3个公司,每个公司都有自己的工作流方式;客户端代码使用这3个公司的工作流。3、门面模式代码实现。

hanxiaoyong_的博客 799

c++设计模式之Facade门面模式.txt

设计模式C++学习笔记之六(Facade门面模式) Facade门面模式,也是比较常用的一种模式,基本上所有软件系统中都会用到。 GOF 在《设计模式》一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。简单说,就是将复杂的逻辑封装起来,对外公开简单的接口,由客户程序调用。这里举了一个发送邮件的例子,我们理解为电

idea的博客 377

C++设计模式之六--Facade门面模式

转自:http://www.cnblogs.com/wanggary/archive/2011/04/12/2014186.html     Facade门面模式,也是比较常用的一种模式,基本上所有软件系统中都会用到。 GOF 在《设计模式》一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。简单说

life_liver的专栏 713

设计模式C++之六(Facade门面模式)

Facade门面模式,也是比较常用的一种模式,基本上所有软件系统中都会用到。 GOF 在《设计模式》一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。简单说,就是将复杂的逻辑封装起来,对外公开简单的接口,由客户程序调用。这里举了一个发送邮件的例子,我们理解为电子邮件吧,普通的邮件应该不需要告诉邮局,我们写的信

jeje1115的专栏 645

设计模式C++学习笔记之六(Facade门面模式)

Facade门面模式,也是比较常用的一种模式,基本上所有软件系统中都会用到。GOF在《设计模式》一书中给出如下定义:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。简单说,就是将复杂的逻辑封装起来,对外公开简单的接口,由客户程序调用。这里举了一个发送邮件的例子,我们理解为电子邮件吧,普通的邮件应该不需要告诉...

aaa407217484的博客 88
上一篇: WebSocket协议
下一篇: 用bat脚本自动生成安装包Innosetup
边缘计算机
博客等级 码龄17年 185粉丝 125原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值