设计模式 - Adapt模式(适配器模式)
作用:
将一个类的接口转换成客户希望的另外一个接口。Adapt 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
UML示意图
1)采用继承原有接口类的方式
2)采用组合原有接口类的方式
解析:
Adapt模式其实就是把完成同样的一个功能但是接口不能兼容的类桥接在一起使之可以在一起工作,这个模式使得复用旧的接口成为可能.
实现:
Adapt模式有两种实现办法,一种是采用继承原有接口类的方法,一种是采用组合原有接口类的方法,这里采用的是第二种实现方法.
Adapter.h
1 #ifndef ADAPTER_H
2 #define ADAPTER_H
3
4 // 需要被Adapt的类
5 class Target
6 {
7 public:
8 Target(){}
9 virtual ~Target() {}
10
11 virtual void Request() = 0;
12 };
13
14 // 与被Adapt对象提供不兼容接口的类
15 class Adaptee
16 {
17 public:
18 Adaptee(){}
19 ~Adaptee(){}
20 void SpecialRequest();
21 };
22
23 // 进行Adapt的类,采用聚合原有接口类的方式
24 class Adapter
25 : public Target
26 {
27 public:
28 Adapter(Adaptee* pAdaptee);
29 virtual ~Adapter();
30
31 virtual void Request();
32
33 private:
34 Adaptee* m_pAdptee;
35 };
36
37 #endif
2 #define ADAPTER_H
3
4 // 需要被Adapt的类
5 class Target
6 {
7 public:
8 Target(){}
9 virtual ~Target() {}
10
11 virtual void Request() = 0;
12 };
13
14 // 与被Adapt对象提供不兼容接口的类
15 class Adaptee
16 {
17 public:
18 Adaptee(){}
19 ~Adaptee(){}
20 void SpecialRequest();
21 };
22
23 // 进行Adapt的类,采用聚合原有接口类的方式
24 class Adapter
25 : public Target
26 {
27 public:
28 Adapter(Adaptee* pAdaptee);
29 virtual ~Adapter();
30
31 virtual void Request();
32
33 private:
34 Adaptee* m_pAdptee;
35 };
36
37 #endif
Adapter.cpp
1 #include "Adapter.h"
2 #include <iostream>
3
4 void Adaptee::SpecialRequest()
5 {
6 std::cout << "SpecialRequest of Adaptee\n";
7 }
8
9 Adapter::Adapter(Adaptee* pAdaptee)
10 : m_pAdptee(pAdaptee)
11 {
12
13 }
14
15 Adapter::~Adapter()
16 {
17 delete m_pAdptee;
18 m_pAdptee = NULL;
19 }
20
21 void Adapter::Request()
22 {
23 std::cout << "Request of Adapter\n";
24
25 m_pAdptee->SpecialRequest();
26 }
2 #include <iostream>
3
4 void Adaptee::SpecialRequest()
5 {
6 std::cout << "SpecialRequest of Adaptee\n";
7 }
8
9 Adapter::Adapter(Adaptee* pAdaptee)
10 : m_pAdptee(pAdaptee)
11 {
12
13 }
14
15 Adapter::~Adapter()
16 {
17 delete m_pAdptee;
18 m_pAdptee = NULL;
19 }
20
21 void Adapter::Request()
22 {
23 std::cout << "Request of Adapter\n";
24
25 m_pAdptee->SpecialRequest();
26 }
Main.cpp
1 #include "Adapter.h"
2 #include <stdlib.h>
3
4 int main()
5 {
6 Adaptee *pAdaptee = new Adaptee;
7 Target *pTarget = new Adapter(pAdaptee);
8 pTarget->Request();
9
10 delete pTarget;
11
12 system("pause");
13
14 return 0;
15 }
2 #include <stdlib.h>
3
4 int main()
5 {
6 Adaptee *pAdaptee = new Adaptee;
7 Target *pTarget = new Adapter(pAdaptee);
8 pTarget->Request();
9
10 delete pTarget;
11
12 system("pause");
13
14 return 0;
15 }