当前位置: 首页> 房产> 政策 > 桥接模式与适配器模式

桥接模式与适配器模式

时间:2025/7/11 17:18:35来源:https://blog.csdn.net/fengchengwu2012/article/details/140144379 浏览次数:0次

一、共性和区别       

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

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

二、桥接模式

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}
)

关键字:桥接模式与适配器模式

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: