适配器模式

适配器模式是很好理解的模式了,生活中也非常常见,什么插头2口转3口,什么USB转PS2,这都算是适配器模式。说白了,就是如果有一些东西提供的接口你很像用,但是你手头没有好的接口使用它,这个就需要一个适配器,将你需要的接口转换成你所拥有的接口。这样的好处也是显而易见,就是你不用改变你现在所拥有的接口,保证你在任何地方的用法都不需要修改,然后底层的实现由适配器调用需要的接口来具体实现。

image

 

常见的场景

使用第三方库的时候,第三方的库肯定不能适用所有的系统,所以需要一个适配器来转换。

 

优点

1.屏蔽了具体的实现方式,实现了依赖倒转。

2.可以把不统一的接口封装起来,使之成为统一的接口。

3.把本来不方便适用的接口转换成统一的接口。

 

缺点

 

C++实现

 

 1 #ifndef _ADAPTER_H_
 2 #define _ADAPTER_H_
 3 
 4 #include "Adaptee.h"
 5 
 6 
 7 class Target
 8 {
 9 public:
10     Target();
11     virtual ~Target();
12 
13     virtual void request() = 0;
14 };
15 
16 
17 class Adapter: public Target
18 {
19 public:
20     Adapter();
21     ~Adapter();
22 
23     void request();
24 
25 
26 private:
27     Adaptee* adaptee;
28 };
29 
30 
31 #endif
 1 #include "Adapter.h"
 2 
 3 
 4 Target::Target()
 5 {
 6 
 7 }
 8 
 9 
10 Target::~Target()
11 {
12 
13 }
14 
15 
16 Adapter::Adapter():
17     adaptee(new Adaptee())
18 {
19 
20 }
21 
22 
23 Adapter::~Adapter()
24 {
25 
26 }
27 
28 
29 void Adapter::request()
30 {
31     adaptee->specificRequest();
32 }
 1 #ifndef _ADAPTEE_H_
 2 #define _ADAPTEE_H_
 3 
 4 class Adaptee
 5 {
 6 public:
 7     Adaptee();
 8     ~Adaptee();
 9 
10     void specificRequest();
11 
12 };
13 
14 
15 #endif
 1 #include "Adaptee.h"
 2 #include <stdio.h>
 3 
 4 
 5 Adaptee::Adaptee()
 6 {
 7 
 8 }
 9 
10 
11 Adaptee::~Adaptee()
12 {
13 
14 }
15 
16 
17 void Adaptee::specificRequest()
18 {
19     fprintf(stderr, "this is specificRequest\n");
20 }
1 #include "Adapter.h"
2 
3 
4 int main()
5 {
6     Target* tar = new Adapter();
7     tar->request();
8     return 0;
9 }
1 g++ -o client client.cpp Adapter.cpp Adaptee.cpp

 

运行结果

image

posted on 2013-06-27 20:05  曾经的你|  阅读(9121)  评论(5编辑  收藏  举报