适配器模式是一种结构模式。所谓结构模式是指将类或者对象结合在一起形成更大的结构。结构模式又分为类的结构模式和对象的结构模式。类的结构模式就是通过使用继承

类和接口等结合在一起,已形成更大的结构。当一个类从父类继承并实现接口时,这个新的类就把父类的结构和接口的结构结合起来了。类的结构模式是静态的(就是由开始的继承结构决定了结构模式的结构)。一个类的结构模式的典型例子就是类形式的适配器模式对象的结构模式是指把不同类型的对象组合在一起,以实现新的功能的方法。对象的结构模式是动态的(即包含的对象多是基类型的对象,可以传递各种派生类对象进去)。对象的结构模式的例子为:代理模式、合成模式、享元模式、装饰模式、和对象形式的适配器模式等。

什么是适配器模式

适配器是把一个类的接口转换成客户端所期望的另一种接口,从而使原本因接口不匹配而无法再一起工作的两个类可以在一起工作。在软件开发中,如果系统的数据和行为都是正确的,但是接口不符合时,就应该考虑使用适配器模式(而不是直接copy paste 代码),以使得控制范围之外(如果是你自己的,业务直接改代码就ok了,虽然从开闭原则不推荐)的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现有的类,而接口又与需要的接口不一致的情况

适配器模式的两种形式

  适配器模式有两种形式,即类的适配器模式和对象的适配器模式。如下图,左侧为类的适配器模式,右侧为对象的适配器模式

image

类的适配器模式

  该方式是通过从客户端期望接口和现有类派生,以使得派生的类满足期望。(C++的方式就是多重继承,Java的话可以通过从现有类派生并implements 目标接口)

对象的适配器模式

  对象的适配器模式对于现有类不再是派生,而是通过组合的方式。 示例代码如下:

   1: class Target {
   2:   public:
   3:     virtual void FuncA() = 0;
   4: };
   5:  
   6: class Adaptee {
   7:   public:
   8:      void FuncB() { ...} // 该函数提供了FuncA需要的功能
   9: };
  10:  
  11: class Adapter : public Target {
  12:   public:
  13:     virtual void FuncA() { // 目标接口
  14:        m_adaptee.FuncB();  // 使用adaptee的函数提供
  15:     }
  16:   private:
  17:     Adaptee m_adaptee;
  18: };
posted on 2013-09-06 17:57  @且听风吟@  阅读(245)  评论(0编辑  收藏  举报