设计模式:外观模式(C++实现)

2023-09-20 09:07:04

外观模式(Facade Pattern)是一种结构设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式隐藏了子系统的复杂性,使得客户端只需要与外观对象交互,而不需要直接与子系统中的对象进行交互。
以下是一个简单的C++外观模式的示例:

#include <iostream>

// 子系统类A
class SubsystemA
{
public:
    void operationA()
    {
        std::cout << "Subsystem A operation" << std::endl;
    }
};

// 子系统类B
class SubsystemB
{
public:
    void operationB()
    {
        std::cout << "Subsystem B operation" << std::endl;
    }
};

// 外观类
class Facade
{
private:
    SubsystemA *subsystemA;
    SubsystemB *subsystemB;

public:
    Facade()
    {
        subsystemA = new SubsystemA();
        subsystemB = new SubsystemB();
    }
    ~Facade()
    {
        delete subsystemA;
        delete subsystemB;
        subsystemA = nullptr;
        subsystemB = nullptr;
    }
    void operation()
    {
        subsystemA->operationA();
        subsystemB->operationB();
    }
};

int main()
{
    Facade facade;
    facade.operation();
    return 0;
}

运行结果:

Subsystem A operation
Subsystem B operation

在上述示例中,SubsystemA和SubsystemB是子系统类,分别实现了子系统的一些操作。Facade是外观类,它持有子系统类的对象,并提供了一个统一的接口operation()用于访问子系统的操作。
在main()函数中,创建了一个外观类facade对象。通过调用外观类的operation()方法,实现了访问子系统类的操作。客户端只需要与外观对象交互,而不需要直接与子系统类进行交互。
通过外观模式,可以简化客户端与子系统之间的交互,提供了一个统一的接口,隐藏了子系统的复杂性。外观模式可以提高代码的可维护性和可读性,同时也可以降低客户端与子系统之间的耦合度。

更多推荐

高压配电安全监测系统:确保电力系统的稳定运行

随着现代社会对电力需求的不断增长,高压配电系统的重要性日益凸显。为了保证电力系统的稳定运行,提高供电质量,采用高压配电安全监测系统至关重要。力安科技高压配电安全监测系统通过在每面高压柜(进线柜、出线柜、联络柜)配置一只A62系列电力探测器,在断路器的进出铜排接线处各安装一只无线测温探测器,并加装开口电流互感器一套,经G

异步机制的简单实现

计算机有两种阻塞,一是cpu阻塞,二是io阻塞。cpu阻塞就是cpu密集计算,io阻塞比如等待网络响应,等待磁盘响应,纯粹是浪费时间。线程机制和异步机制都可避免io阻塞,但cpu阻塞的负面效果就只有线程可以避免了。在现代计算机语言里,大量线程切换虽然会有性能问题,但是线程用起来简单,而且线程能在固定时间切换,可保证实时

Typora mac新手入门教程

ypora是一款由AbnerLee创造的Markdown编辑器,它具备轻巧的特性。与其他Markdown编辑器有所不同的是,Typora不采用传统的源代码和预览分栏显示方式,而是提供了一种所见即所得的编辑方式,允许用户即时预览文档渲染效果,同时也提供了源代码编辑模式的切换功能。以下是一个在macOS下入门使用Typor

PG-多版本并发控制

多版本并发控制(Multi-VersionConcurrencyControl,MVCC),是数据库中并发访问数据时保证数据一致性的一种方法1.原理1)在并发操作中,当正在写时,如果有用户在读,这时写可能只写了一半,如一行的前半部分刚写入,后半部分还没有写入,这时可能读的用户读取到的数据行的前半部分数据是新的,后半部分

聚焦数据库和新兴硬件的技术合力 中科驭数受邀分享基于DPU的数据库异构加速方案

随着新型硬件成本逐渐降低,充分利用新兴硬件资源提升数据库性能是未来数据库发展的重要方向之一,SIGMOD、VLDB、CICE数据库顶会上出现越来越多新兴硬件的论文和专题。在需求侧,随着数据量暴增和实时性的要求越来越高,数据库围绕处理器、内存、存储和网络四个硬件架构方向不断突破和创新。数据库和新兴硬件之间的融合产生了令人

机器学习中分类问题的初步

分类任务做人脸辨识也可以是分类,手写字识别也可以是用回归来预测分类,因为回归会惩罚那些太正确的分类,反而得到的结果是不好的,还有一个问题如果你把class1当作1,class2当作2,class3当3,这样做就相当于默认了class12相近二元分类的任务的步骤类别的个数的概率水系中某一个品种的概率如果找到了高斯分布就可

JavaScript学习笔记04

JavaScript笔记04方法定义方法当一个函数是一个对象的属性时,称之为方法。例:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><script>letperson={name:"张三",birthday:200

JavaScript之观察者模式

本文作者为360奇舞团前端开发工程师概述在日常开发中,开发人员经常使用设计模式来解决软件设计中的问题。其中,观察者模式是一种常用的模式,它可以帮助开发人员更好地处理对象之间的通信。在JavaScript中,观察者模式的应用非常广泛,可以用于实现事件处理、数据绑定等功能。本文将介绍观察者模式的基本概念和实现方式。什么是观

大数据之Hadoop

大数据按顺序给出数据存储单位:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。1Byte=8bit1K=1024Byte1MB=1024K1G=1024M1T=1024G1P=1024THadoopHadoop是一个能够对大量数据进行分布式处理的软件框架。分布式处理是指:比如有100

苹果CMS主题 MXonePro二开优化修复开源版影视网站源码

MXPro模板主题(又名:mxonepro)是一款基于苹果cms程序的一款全新的简洁好看UI的影视站模板类似于西瓜视频,不过同对比MxoneV10魔改模板来说功能没有那么多,也没有那么大气,但是比较且可视化功能较多简洁且有周更记录样式等多功能后台设置,类似预mxone魔改版的预告片功能,用来做影视站模板也是极好的,但之

【go语言】条件,选择,循环和特殊语句

if语句a:=10ifa>20{fmt.Printf("a大于20")}elseifa<10{fmt.Printf("a小于10")}else{fmt.Printf("a大于等于10,a小于等于20")}go语言的if语句和C语言的if语句的差不多,需要注意的是else和elseif要写在括号右边;go语言的if语句还

热文推荐