学习笔记——适配器模式Adapter

适配器模式适用于将不一致的接口转换为一致的接口。

比如,去香港玩儿,带上了自己的笔记本电脑,结果晚上插电时就抓瞎了,电源插孔与插座不一致。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 }
原文地址:https://www.cnblogs.com/dev2007/p/3566224.html