定義
將一個類的接口轉(zhuǎn)換成客戶希望的另一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
應(yīng)用場景
- 在軟件系統(tǒng)中,由于應(yīng)用環(huán)境的變化,常常需要將“一些現(xiàn)存的對象 ”放在新的環(huán)境中應(yīng)用,但是新環(huán)境要求的接口是這些現(xiàn)存對象所不滿足的。
- 如何應(yīng)對這種“遷移的變化”?如何既能利用現(xiàn)有對象的良好實現(xiàn),同時又能滿足新的應(yīng)用環(huán)境所要求的接口?
結(jié)構(gòu)
文章來源:http://www.zghlxwxcb.cn/news/detail-633262.html
代碼示例
//Adapter.h
/****************************************************/
#ifndef ADAPTER_H
#define ADAPTER_H
#include <iostream>
using namespace std;
// 巴斯勒相機(jī)類(適配者)
class BaslerCamera
{
public:
// 打開相機(jī)
void openBaslerCamera() {
cout << "巴斯勒相機(jī):打開相機(jī)。" << endl;
}
// 關(guān)閉相機(jī)
void closeBaslerCamera() {
cout << "巴斯勒相機(jī):關(guān)閉相機(jī)。" << endl;
}
// 打開曝光設(shè)置
void openExposureSettings() {
cout << "巴斯勒相機(jī):打開曝光設(shè)置。" << endl;
}
// 更改相機(jī)幀率
void changeCameraFrame() {
cout << "巴斯勒相機(jī):更改相機(jī)幀率。" << endl;
}
};
// 相機(jī)接口類
class Camera
{
public:
// 構(gòu)造函數(shù)
Camera() {};
// 析構(gòu)函數(shù)
virtual ~Camera() {};
// 打開相機(jī)
virtual void openCamera() = 0;
// 關(guān)閉相機(jī)
virtual void closeCamera() = 0;
// 配置屬性
virtual void setConfig() = 0;
};
// 相機(jī)適配器類
class CameraAdapter :public Camera, public BaslerCamera
{
public:
// 打開相機(jī)
virtual void openCamera() {
openBaslerCamera();
}
// 關(guān)閉相機(jī)
virtual void closeCamera() {
closeBaslerCamera();
}
// 配置屬性
virtual void setConfig() {
// 打開曝光設(shè)置
openExposureSettings();
// 更改相機(jī)幀率
changeCameraFrame();
}
};
#endif
//test.cpp
/****************************************************/
#include "Adapter.h"
int main()
{
Camera *m_camera = new CameraAdapter();
// 打開相機(jī)
m_camera->openCamera();
// 配置相機(jī)
m_camera->setConfig();
// 關(guān)閉相機(jī)
m_camera->closeCamera();
delete m_camera;
return 0;
}
運(yùn)行結(jié)果文章來源地址http://www.zghlxwxcb.cn/news/detail-633262.html
要點總結(jié)
- Adapter模式主要應(yīng)用于“希望復(fù)用一些現(xiàn)存的類,但是接口又與復(fù)用環(huán)境要求不一致的情況”,在遺留代碼復(fù)用、類庫遷移等方面非常有用。
- GoF 23定義了兩種Adapter模式的實現(xiàn)結(jié)構(gòu):對象適配器和類適配器。但類適配器采用“多繼承”的實現(xiàn)方式,一般不推薦使用。對象適配器采用“對象組合”的方式,更符合松耦合精神。
- Adapter模式可以實現(xiàn)的非常靈活,不必拘泥于Gof23中定義的兩種結(jié)構(gòu)。例如,完全可以將Adapter模式中的‘現(xiàn)存對象”作為新的接口方法參數(shù),來達(dá)到適配的目的。
到了這里,關(guān)于適配器模式(C++)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!