适配器模式是一种结构型的软件设计模式,也称包装模式,即将相对复杂的功能(可能用到多个类)封装起来,提供一个使用者想要的接口,使用者只需要调用接口,不需要知道接口里封装的内容是如何实现的。比如在面对一些第三方库或者SDK开发时,它们的接口往往与我们自己想要的接口不一致,此时适配器模式可以很好地扮演一个接口转换器的角色,将别人的接口与我们的接口对应上。
优点:
缺点:
#pragma once
#include
using namespace std;
// 巴斯勒相机类(适配者)
class BaslerCamera
{
public:
// 打开相机
void openBaslerCamera() {
cout << "巴斯勒相机:打开相机。" << endl;
}
// 关闭相机
void closeBaslerCamera() {
cout << "巴斯勒相机:关闭相机。" << endl;
}
// 打开曝光设置
void openExposureSettings() {
cout << "巴斯勒相机:打开曝光设置。" << endl;
}
// 更改相机帧率
void changeCameraFrame() {
cout << "巴斯勒相机:更改相机帧率。" << endl;
}
};
// 相机接口类
class Camera
{
public:
// 构造函数
Camera() {};
// 析构函数
virtual ~Camera() {};
// 打开相机
virtual void openCamera() = 0;
// 关闭相机
virtual void closeCamera() = 0;
// 配置属性
virtual void setConfig() = 0;
};
// 相机适配器类
class CameraAdapter :public Camera, public BaslerCamera
{
public:
// 打开相机
virtual void openCamera() {
openBaslerCamera();
}
// 关闭相机
virtual void closeCamera() {
closeBaslerCamera();
}
// 配置属性
virtual void setConfig() {
// 打开曝光设置
openExposureSettings();
// 更改相机帧率
changeCameraFrame();
}
};
int main()
{
Camera* m_camera = new CameraAdapter();
// 打开相机
m_camera->openCamera();
// 配置相机
m_camera->setConfig();
// 关闭相机
m_camera->closeCamera();
delete m_camera;
return 0;
}
Camera类的接口使我们实际想要的接口,但是事实上我们拿到的现有的接口BaslerCamera类提供的接口,因此需要CameraAdapter作为类适配器,它同时继承自Camera和BaslerCamera两个类。
#pragma once
#include
#include "BaslerCamera.h"
using namespace std;
// 相机接口类
class Camera
{
public:
// 构造函数
Camera() {};
// 析构函数
virtual ~Camera() {};
// 打开相机
virtual void openCamera() = 0;
// 关闭相机
virtual void closeCamera() = 0;
// 配置属性
virtual void setConfig() = 0;
};
// 相机适配器类
class CameraAdapter :public Camera
{
public:
// 构造函数
CameraAdapter() {
m_baslerCamera = new BaslerCamera();
}
// 析构函数
virtual ~CameraAdapter() {
if (m_baslerCamera != nullptr) {
delete m_baslerCamera;
m_baslerCamera = nullptr;
}
}
// 打开相机
virtual void openCamera() {
m_baslerCamera->openBaslerCamera();
}
// 关闭相机
virtual void closeCamera() {
m_baslerCamera->closeBaslerCamera();
}
// 配置属性
virtual void setConfig() {
// 打开曝光设置
m_baslerCamera->openExposureSettings();
// 更改相机帧率
m_baslerCamera->changeCameraFrame();
}
private:
BaslerCamera *m_baslerCamera; // 适配者类实例
};
int main()
{
Camera* m_camera = new CameraAdapter();
// 打开相机
m_camera->openCamera();
// 配置相机
m_camera->setConfig();
// 关闭相机
m_camera->closeCamera();
delete m_camera;
return 0;
}
适配器类做了改变,类中增加了一个适配者类的实例对象,调用的结果同类适配器模式一致。
设计模式之适配器模式(C++)_c++适配器模式-CSDN博客