桥接模式与适配器模式

news/2024/10/6 9:04:39/

一、共性和区别       

      桥接设计模式和适配器设计模式的共同点和明显,它们都是使两种不同的类配合工。

       二者的区别在于,适配器模式是将已有的两个不同接口接口组合到一起,使得适配器同时拥有两个不同接口的功能,其目的是使两个不兼容的接口协调工作桥接模式目的是抽象和实现分离,实现的改变不影响抽象,抽象的变化不影响实现,可以有效的应对具体业务的变化,以及业务实现的横向扩展。

二、桥接模式

1、函数类声明

#ifndef BRIDGE_H
#define BRIDGE_H
#include <iostream>
using namespace std;///定义抽象业务类
class  AbstractObj{
public:virtual  void  abstractOpt()=0;
};/// 定义具体业务实现类A
class  ObjImplA: public AbstractObj{
public:ObjImplA();~ObjImplA();void   abstractOpt()  override;
};/// 定义具体的业务实现了B
class  ObjImplB: public AbstractObj{
public:ObjImplB();~ObjImplB();void abstractOpt()  override;
};/// 定义桥器
class IBridge{
public:virtual void   bridgeOpt()=0;
};/// 桥接器具体实现
class  BridgeImpl: public IBridge{
/// 桥接器持有对抽象业务类的引用,不考虑具体实现,这样不管具体的业务怎么处理,都不会影响到接口,随着业务的扩张,业务横向增加,对于用户是无感的,用户只需要通过桥接器动态调用即可    
private:AbstractObj*  abstractObj;
public:BridgeImpl(AbstractObj*  abstractObj);~BridgeImpl();void bridgeOpt() override;
};#endif 

2、函数定义

#include "./bridge.h"ObjImplA::ObjImplA(){}
ObjImplA::~ObjImplA(){}
void ObjImplA::abstractOpt(){std::cout << "ObjImplA call  abstractOpt  function" << std::endl;
}ObjImplB::ObjImplB(){}
ObjImplB::~ObjImplB(){}
void  ObjImplB::abstractOpt(){std::cout << "ObjImplB call  abstractOpt  function" << std::endl;
}BridgeImpl::BridgeImpl(AbstractObj*  abstractObj){this->abstractObj = abstractObj ;
}void BridgeImpl::bridgeOpt(){abstractObj->abstractOpt();
}

3、测试

 /// 处理B类业务
IBridge*  bridge = new BridgeImpl(new ObjImplB());
bridge->bridgeOpt();
/// 处理A类业务
bridge = new BridgeImpl(new ObjImplA());
bridge->bridgeOpt();

三、适配器模式 

 1、函数声明

#ifndef ADAPTER_H
#define ADAPTER_H
#include  <iostream>
#include <string.h>
using namespace std;/// 场景设定,笔记本上只有HDMI接口,而手中只有一根VGA的线,要想把这个VGA得线连到笔记本,就需要一个HDMI的转接头,这就典型的适配器模式///  定义适配者vga VAG线
class Vga{
protected:string vgaTran();
};/// 定义适配接口  hdmi接口
class  IHdmi{
public:virtual void hdmiIO()=0;
};/// 定义适配器 hdmi 转接头
class HdmiAdapter : public Vga,public IHdmi {
public:void hdmiIO()  override;
};#endif
#include "adapter.h"string Vga::vgaTran(){///  使用vga线传输信号return "vga data line  tran signal";
}void  HdmiAdapter::hdmiIO(){string singal = this->vgaTran();/// 使用hdmi接口输出vga传输的信号cout<< "hdmi  output : " << singal << endl;
}

2、业务调用

  HdmiAdapter*  adapter = new  HdmiAdapter();adapter->hdmiIO();

四、CMakeLists.txt

cmake_minimum_required(VERSION 3.5)project(dpcode LANGUAGES CXX)set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)add_executable(dpcode main.cppbridge.hbridge.cppadapter.hadapter.cpp)include(GNUInstallDirs)
install(TARGETS dpcodeLIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)


http://www.ppmy.cn/news/1473846.html

相关文章

【云原生】Prometheus监控Docker指标并接入Grafana

目录 一、前言 二、docker监控概述 2.1 docker常用监控指标 2.2 docker常用监控工具 三、CAdvisor概述 3.1 CAdvisor是什么 3.2 CAdvisor功能特点 3.3 CAdvisor使用场景 四、CAdvisor对接Prometheus与Grafana 4.1 环境准备 4.2 docker部署CAdvisor 4.2.2 docker部署…

Lua 错误处理

Lua 错误处理 Lua是一种轻量级的编程语言&#xff0c;广泛用于游戏开发、脚本编写和其他应用程序中。在编程过程中&#xff0c;错误处理是一个重要的方面&#xff0c;它可以帮助开发者创建更健壮和可靠的程序。本文将详细介绍Lua中的错误处理机制。 错误类型 在Lua中&#x…

flask使用定时任务flask_apscheduler(APScheduler)

Flask-APScheduler描述: Flask-APScheduler 是一个 Flask 扩展&#xff0c;增加了对 APScheduler 的支持。 APScheduler 有三个内置的调度系统可供您使用&#xff1a; Cron 式调度&#xff08;可选开始/结束时间&#xff09; 基于间隔的执行&#xff08;以偶数间隔运行作业…

计网_计算机网络概述

2024.07.03&#xff1a;计算机网络概述 第1节 计算机网络概述 1.1 互连网与互联网1.1.1总结1.1.2 因特网(互联网)发展[自行了解] 1.2 计算机网络组成1.2.1 计算机网络组成方式11.2.2 计算机网络组成方式21.2.3 计算机网络组成方式3 1.3 三种交换方式1.3.1 电路交换(1) 电路交换…

Laravel任务调度:自动化运维的魔法师

标题&#xff1a;Laravel任务调度&#xff1a;自动化运维的魔法师 在现代Web应用开发中&#xff0c;自动化任务调度是一项不可或缺的功能。Laravel框架提供了一个强大的任务调度系统&#xff0c;允许开发者安排定时任务&#xff0c;如定期发送邮件、备份数据库或执行定时脚本。…

Unity 数据持久化【PlayerPrefs】

1、数据持久化 文章目录 1、数据持久化PlayerPrefs基本方法1、PlayerPrefs概念2、存储相关3、读取相关4、删除数据思考 信息的存储和读取 PlayerPrefs存储位置1、PlayerPrefs存储的数据在哪个位置2、PlayerPrefs 数据唯一性思考 排行榜功能 2、Playerprefs实践1、必备知识点-反…

玄机——第四章 windows实战-wordpress wp

文章目录 一、前言二、概览简介 三、参考文章四、步骤&#xff08;解析&#xff09;准备阶段1.0 1.1请提交攻击者攻击成功的第一时间&#xff0c;格式&#xff1a;flag{YY:MM:DD hh:mm:ss} 1.2请提交攻击者的浏览器版本 flag{Firgfox/2200} 1.3请提交攻击者目录扫描所使用的工具…

防火墙基础及登录(华为)

目录 防火墙概述防火墙发展进程包过滤防火墙代理防火墙状态检测防火墙UTM下一代防火墙&#xff08;NGFW&#xff09; 防火墙分类按物理特性划分软件防火墙硬件防火墙 按性能划分百兆级别和千兆级别 按防火墙结构划分单一主机防火墙路由集成式防火墙分布式防火墙 华为防火墙利用…