适配器模式

原创 2013年12月03日 11:21:38

适配器模式

Adapter(别名Wrapper)模式:将一个类的接口,转换成客户期望的另一个类的接口。适配器让原本接口不兼容的类可以合作无间。

 

要点:

1. 适配器模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。

2. 适配器模式有对象适配器和类适配器两种形式的实现结构,但是类适配器采用“多继承”的实现方式,带来了不良的高耦合,所以一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。


类的适配器模式结构图(继承)


对象的适配器模式结构图(组合)

(对象适配器的代码实现)

Target:定义Client使用的与特定领域相关的接口
public interface Target {
    void request();
}

Adaptee:现在需要适配的已经存在的接口
public class Adaptee {
    public void specificRequest(){}
}

Adapter:对Adaptee 的接口与Target接口进行适配
public class Adapter implements Target{
  public Adapter(Adaptee adaptee)  {
        super();
        this.adaptee = adaptee;
    }
    public voit request(){
        adaptee.specificRequest();
    }
    private Adaptee adaptee;
}

 

适用性:

1. 系统需要使用现有的类,而此类的接口不符合系统的需要。

2. 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。

3. (对对象适配器而言)在设计里,需要改变多个已有子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。

 

效果及优缺点:

对于类适配器:

1. 用一个具体的Adapter类对Adaptee和Taget进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能胜任工作。

2. 使得Adapter可以override(重定义) Adaptee的部分行为,因为Adapter是Adaptee的一个子类。

对于对象适配器:

1. 允许一个Adapter与多个Adaptee,即Adaptee本身以及它的所有子类(如果有子类的话)同时工作。Adapter也可以一次给所有的Adaptee添加功能。

2. 使得override(重定义)Adaptee的行为比较困难。如果一定要override Adaptee的方法,就只好先做一个Adaptee的子类以override Adaptee的方法,然后再把这个子类当作真正的Adaptee源进行适配。

 

  • 大小: 22.8 KB
  • 大小: 24.6 KB

JAVA适配器模式示例

将一个类的接口转换成客户想要的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 适配器一共包括3种角色 1、目标:目标是一个接口,该接口是客户想使用的接口 ...
  • qq7342272
  • qq7342272
  • 2011年10月31日 14:02
  • 6199

设计模式——适配器模式 Java源代码

适配器模式,《Head First Design Patterns》给的代码的例子是关于鸭子和火鸡,然而鸭子和火鸡离日常生活比较远。这次,我改编了实验楼网站上面的例子,关于插座和充电器。...
  • u013390476
  • u013390476
  • 2016年01月01日 16:02
  • 2579

设计模式-适配器模式(Go语言描述)

在上一篇博客设计模式-策略模式(Go语言描述)中我们用最简单的代码用go语言描述了 设计模式中的策略模式,用最简单的实例来描述相信可以让初学者可以很轻松的掌握各种设计模式。继上篇博客,我们接着用同样...
  • qibin0506
  • qibin0506
  • 2016年01月28日 08:56
  • 6367

运用适配器模式应对项目中的变化

从上面可知随着项目的进行, 导致了接口的改变。但是我的前端工程中已经大量使用了ESPMenu对象, 大量调用了ESPMenu的方法,并且对ESPMenu的访问分散在不同的文件中。如果要把ESPMenu...
  • brave2211
  • brave2211
  • 2014年01月26日 13:25
  • 6140

一个示例让你明白适配器模式

本文讨论适配器模式。适配器模式是23中设计模式之一,它的主要作用是在新接口和老接口之间进行适配。它非常像我们出国旅行时带的电源转换器。为了举这个例子,我还特意去京东上搜了一下电源转换器,确实看到了很多...
  • brave2211
  • brave2211
  • 2014年01月26日 00:08
  • 43275

JAVA设计模式初探之适配器模式

1. 概述   将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 2. 解决的问题   即Adapter模式使得原本由于接口不...
  • jason0539
  • jason0539
  • 2014年03月29日 07:53
  • 45871

设计模式php实例:适配器模式

适配器模式将一个类的换成客户端需要的另一个接口,使原本不兼容的接口能一起工作。一个现实中的例子,假如屋里墙上只有两项插口,而风扇有三个插头,这时需要再拿一个移动插线板,插线板接入墙壁插口的一段是两项插...
  • wzllai
  • wzllai
  • 2012年08月05日 19:54
  • 3111

SpringMvc中使用到的适配器模式

此处采用了适配器模式, 由于Controller的类型不同,有多重实现方式,那么调用方式就不是确定的,如果需要直接调用Controller方法,需要在代码中写成如下形式:  Java...
  • bu123dian
  • bu123dian
  • 2016年10月10日 16:21
  • 2265

从SpringMVC来看适配器模式

适配器模式----------设计模式 最近在看SpringMVC源码,从中看到了比较优秀的设计模式所以来分享下。 1.适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口,Ad...
  • u010288264
  • u010288264
  • 2016年12月23日 10:55
  • 2083

JDK与设计模式:适配器模式

1、适配器模式         适配器模式可以将一个类的接口和另一个类的接口匹配起来。适配器模式将一个接口转换为客户希望的另一个接口,使接口不兼容的哪些类可以一起工作,其别名是包装器。适配器模式既可...
  • Luckydog1991
  • Luckydog1991
  • 2016年06月18日 09:54
  • 1211
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:适配器模式
举报原因:
原因补充:

(最多只允许输入30个字)