Demo Code
#include "stdint.h"
#include <iostream>
using namespace std;
#include "util.h"
class ReadShm_LibA{
public:
uint8_t read(string _name){
cout << "Get data with library A API, Parameter : "\
<< _name.c_str() << endl;
return 0;
}
};
class ReadShm_LibB{
public:
uint8_t get(string _name, int _size){
cout << "Get data with library B API, Parameter : "\
<< _name.c_str() << " " << _size << endl;
return 0;
}
};
class AbstractSubject_ReadShm{
public:
virtual uint8_t xxx_readShm(string _name) = 0;
};
class ReadSubject_ReadShmA : public AbstractSubject_ReadShm{
public:
uint8_t xxx_readShm(string _name){
ReadShm_LibA a;
return a.read(_name);
}
};
class ReadSubject_ReadShmB : public AbstractSubject_ReadShm{
public:
uint8_t xxx_readShm(string _name){
ReadShm_LibB b;
return b.get(_name, 10);
}
};
class Adapter_ReadShm{
AbstractSubject_ReadShm* m_api;
public:
Adapter_ReadShm(){
//m_api = new ReadSubject_ReadShmA();
m_api = new ReadSubject_ReadShmB();
}
~Adapter_ReadShm(){
if (nullptr != m_api){
delete m_api;
}
}
uint8_t readShm(string _name){
return m_api->xxx_readShm(_name);
}
};
void test_main_adapter(void){
Adapter_ReadShm rs;
rs.readShm("haha");
}
Demo Result
Get data with library B API, Parameter : haha 10
Summary
Point1 对于应用层使用底层接口,这里最理想的情况时做到封装,将自己需要什么样的接口和底层能提供怎样的接口分离,将两者的统合交给适配器来做,这样应用层便可以专注于内部逻辑的开发,就算接口有所变动也不至于内部做过多的改变