适配器模式是一种结构型的软件设计模式,也称包装模式,即将相对复杂的功能(可能用到多个类)封装起来,提供一个使用者想要的接口,使用者只需要调用接口,不需要知道接口里封装的内容是如何实现的。比如在面对一些第三方库或者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博客