设计模式 - Adapt模式(适配器模式)


作用:

将一个类的接口转换成客户希望的另外一个接口。Adapt 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 

 

UML示意图

1)采用继承原有接口类的方式 

设计模式 - Adapt模式(适配器模式) 

 2)采用组合原有接口类的方式

设计模式 - Adapt模式(适配器模式) 

 

解析:

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

 


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  }

 

 

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  }

 

 

你可能感兴趣的:(适配器模式)