适配器模式适用于将不一致的接口转换为一致的接口。
比如,去香港玩儿,带上了自己的笔记本电脑,结果晚上插电时就抓瞎了,电源插孔与插座不一致。WTF……
插座是酒店装好的,不可能拆了换一个,电源是自己的,也不可能说重新买一个,只有买个转换器了。
通过转换器,将我们不适配的插头转换成适配的插头。
CTarget外部接口,理解为所需要插头样式;
CAdapter为适配器(转换器),将不适配插头(CAdaptee)转换为适配样式;
CAdaptee为待适配类,理解为需要转换插头样式的插头。
C++示例
ITarget.h
1 #pragma once 2 class ITarget 3 { 4 public: 5 ITarget(void); 6 virtual ~ITarget(void); 7 public: 8 void Request(); 9 };
ITarget.cpp
1 #include "ITarget.h" 2 #include <iostream> 3 4 ITarget::ITarget(void) 5 { 6 } 7 8 9 ITarget::~ITarget(void) 10 { 11 } 12 13 void ITarget::Request() 14 { 15 std::cout<<"Target"<<std::endl; 16 }
Adapter.h
1 #pragma once 2 #include "itarget.h" 3 #include "Adaptee.h" 4 5 class Adapter : 6 public ITarget 7 { 8 public: 9 Adapter(void); 10 Adapter(Adaptee* tee); 11 ~Adapter(void); 12 public: 13 void Request(); 14 private: 15 Adaptee* mAde; 16 };
Adapter.cpp
1 #include "Adapter.h" 2 3 4 Adapter::Adapter(void) 5 { 6 } 7 8 Adapter::Adapter(Adaptee* tee) 9 { 10 this->mAde = tee; 11 } 12 13 Adapter::~Adapter(void) 14 { 15 } 16 17 void Adapter::Request() 18 { 19 mAde->Request(); 20 }
Adaptee.h
1 #pragma once 2 class Adaptee 3 { 4 public: 5 Adaptee(void); 6 ~Adaptee(void); 7 public: 8 void Request(); 9 };
Adaptee.cpp
1 #include "Adaptee.h" 2 #include <iostream> 3 4 Adaptee::Adaptee(void) 5 { 6 } 7 8 9 Adaptee::~Adaptee(void) 10 { 11 } 12 13 14 void Adaptee::Request() 15 { 16 std::cout<<"1"<<std::endl; 17 }
main.cpp
1 #include "Adaptee.h" 2 #include "Adapter.h" 3 4 int main() 5 { 6 Adaptee* ade = new Adaptee(); 7 Adapter* pTarget = new Adapter(ade); 8 pTarget->Request(); 9 return 0; 10 }