适配模式让我想起到了电脑的适配器, 设配器的功能就是将输入220A/5A的输入电源进行转化,成为适应电脑的输入电源5V /1A,适配器模式就是这个转换过程。
如上图在USB接口中接入电源插座B的接口,使之能适应于USB插座,而不改变usb原有的接口,在usb系统中新增adapter类,该类对外接口与usb接口保持一致。
在adapter 中封装了SocketOutput 接口,通过adapter改变电源和电流(变压),使之变得合适USB。
//插座抽象类
class ISocketOutput{
public:
virtual int getSocketU()= 0;
virtual int getSocketA() = 0;
};
//实现了插座接口的插座类
class SocketOutput: public ISocketOutput
{
public:
SocketOutput(int u, int a);
SocketOutput();
~SocketOutput();
int getSocketU();
int getSocketA();
private:
int m_socketU;
int m_socketA;
};
SocketOutput::SocketOutput(int u, int a)
:m_socketU(u),
m_socketA(a)
{
}
SocketOutput::SocketOutput(){
}
SocketOutput::~SocketOutput(){
}
int SocketOutput::getSocketU(){
return m_socketU = 220;
}
int SocketOutput::getSocketA(){
return m_socketA = 5;
}
//usb 抽象接口
class IUsbOutput{
public:
virtual int getUsbU()= 0; //获取电压
virtual int getUsbA() =0; //获取电流
};
/*实际USB接口类*/
class usbOutput: public IUsbOutput
{
public:
usbOutput();
~usbOutput();
int getUsbU(); //获取电压
int getUsbA(); //获取电流
private:
int m_usbU; //电压
int m_USBA;//电流
};
usbOutput::usbOutput()
{
}
usbOutput::~usbOutput()
{
}
//USB接口直接获取电压
int usbOutput::getUsbU(){
cout<<"直接通过现成的USB接口获取5U电压"<<endl;
return 5;
}
//USB接口直接获取电流
int usbOutput::getUsbA(){
cout<<"直接通过现成的USB接口获取1A电流"<<endl;
return 1;
}
/*适配USB接口的适配器,
* 改造插座输送来的电压和电流,
* 实现usb抽象接口类的中的方法*/
class adapterInterface: public IUsbOutput, public SocketOutput
{
public:
adapterInterface(int u,int i);
~adapterInterface();
adapterInterface();
int getUsbU(); //获取USB电压
int getUsbA(); //获取USB电流
private:
int changeU25(int u);//改变插座电压为5v
int changeI21(int i);//改变电流为1A
};
adapterInterface::adapterInterface(int u,int i)
:SocketOutput(u, i)
{
}
adapterInterface::adapterInterface(){}
adapterInterface::~adapterInterface(){}
//获取USB电压
int adapterInterface::getUsbU(){
return changeU25(getSocketU());
}
//获取USB电流
int adapterInterface::getUsbA(){
return changeI21(getSocketA());
}
//改变插座电压为5v
int adapterInterface::changeU25(int u){
cout<<"采用适配器 将插座输入的"<<u <<"U 电压改成 5 U"<<endl;
return 5;
}
//改变电流为1A
int adapterInterface::changeI21(int i){
cout<<"采用适配器 将插座输入的"<<i <<"A 电流改成 1 A"<<endl;
return 1;
}
client:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// IUsbOutput* out = new usbOutput();//使用通用的,usb接口获取电压和电流
IUsbOutput* out = new adapterInterface();//适配器将插座电压和电流转换成usb电压和电流
out->getUsbA();
out->getUsbU();
return a.exec();
}
新增了一种供电方法:调用适配器模块获取电源
通过原来的usb 供电设备供电。
适配器模式适用于场景:在在现有稳定的系统上接入新的系统,新系统接口与现有系统接口不太匹配的情况下。采用适配器模式符合设计原则。