`
student_lp
  • 浏览: 432032 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

     适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

     在大规模的系统开发过程中,我们常常碰到诸如以下这些情况:我们需要实现某些功能,这些功能已有还不太成熟的一个或多个外部组件,如果我们自己重新开发这些功能会花费大量时间;所以很多情况下会选择先暂时使用外部组件,以后再考虑随时替换。但这样一来,会带来一个问题,随着对外部组件库的替换,可能需要对引用该外部组件的源代码进行大面积的修改,因此也极可能引入新的问题等等。如何最大限度的降低修改面呢?

     Adapter模式就是针对这种类似需求而提出来的。Adapter模式通过定义一个新的接口(对要实现的功能加以抽象),和一个实现该接口的Adapter(适配器)类来透明地调用外部组件。这样替换外部组件时,最多只要修改几个Adapter类就可以了,其他源代码都不会受到影响。

一、什么情况下使用适配器模式

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

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

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

二、适配器模式的结构

     适配器模式有类的适配器模式和对象的是配置器模式两种不同的形式。其中类的适配器是通过继承实现的,而对象的适配器是通过对象的委派实现的。

1、类的适配器(继承实现)模式的结构

    类的适配器模式把被适配的类的API转换成目标类的API,其静态结构图如下:


      从上图可以看出,Adaptee类并没有sampleOperation2()方法,而客户端则期待这个方法。为了使客户端能够使用Adaptee类,提供一个中间环节,即类Adapter,把Adapter的API与Target类的API衔接起来。Adapter与Adaptee是继承关系,这决定了这个适配器模式是类的。

模式所涉及的角色有:

①目标(Target)角色:这就是所期待得到的接口。注意,由于这里讨论的是类适配器模式,因此目标不可以是类。

②源(Adaptee)角色:现有需要适配的接口。

③适配器(Adapter)角色:适配器类是本模式的核心。适配器把源接口换成目标接口。显然,这一角色不可以是接口,而必须是具体类。

实例代码:

//Target的源代码
public interface Target{
     //这是源类也有的方法sampleOperation1
     void sampleOperation1();
     //这是源类没有的方法sampleOperation2
     void sampleOperation2();
}
//Adaptee源类的代码
public class Adaptee{
     //源类含有的方法sampleOperation1
     public void sampleOperation1(){}
}
//适配器类Adapter的代码
public class Adpater extends Adaptee implements Target{
     //适配器类补充缺失方法sampleOperation2
     public void sampleOperation2(){
          //write your code here
     }
}

      使用一个具体类把源(Adaptee)适配到目标(Target)中,这样一来,如果源以及源的子类都是用此类适配,就行不通了。由于适配器类是源的子类,因此可以在适配器类中置换掉(Override)源的一些方法。

2、对象的适配器模式结构

     与类的适配器模式一样,对象的适配器模式把适配的类的API转换成目标类的API,与类的适配器模式不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类,而是使用委派关系连接到Adaptee类。

对象的适配器模式结构如下:


模式的角色有:

①目标(Target)角色:这就是所期待的接口,目标可以是具体的或抽象的类。

②源(Adaptee)角色:现有需要适配的接口。

③适配器(adapter)角色:适配器类是本模式的核心。适配器把源接口转换成目标接口,显然,这一角色必须是具体类。

实例代码:

//Target的源代码
public interface Target{
     //这是源类也有的方法sampleOperation1
     void sampleOperation1();
     //这是源类没有的方法sampleOperation2
     void sampleOperation2();
}
//Adaptee源类的代码
public class Adaptee{
     //源类含有的方法sampleOperation1
     public void sampleOperation1(){}
}
//适配器类Adapter的代码
public class Adpater implements Target{
     private Adaptee adaptee;
     public Adapter(Adaptee adaptee){
          super();
          this.adaptee = adaptee;
     }
     //源类有方法sampleOperation1,可以直接委派
     public void sampleOperation1(){
         this.adaptee.sampleOperation1();
     }
     //源类没有方法sampleOperation2,需要适配器补充此方法
     public void sampleOperation2(){
          //write your code here
     }
}

 对象适配器的效果:①一个适配器可以把多种不同的源是配到同一个目标。换言之,同一个适配器可以把源类和他的子类都是配到目标接口。②与类的适配器模式相比,要想置换类的方法就不太容易。如果一定要置换掉源类的一个或多个方法,就只好先做一个源类的子类,将源类的方法置换掉,然后在把源类的子类当做真正的源进行适配。③虽然要想置换源类的方法不容易,但是要想增加一些新的方法则方便的很,而且新增加的方法可同时适用于所有的源。

  • 大小: 21.3 KB
  • 大小: 22.5 KB
分享到:
评论

相关推荐

    适配器模式adapter,含源码下载

    适配器模式(Adapter Pattern)是一种结构型设计模式,它能将两个不兼容的接口连接在一起,使得原本由于接口不匹配而无法一起工作的类能够协同工作。在IT行业中,适配器模式广泛应用在系统集成、组件重用以及解决...

    java 汽车适配器(Adapter适配器模式)

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在Java中,适配器模式被广泛应用于解决系统间的兼容性问题,尤其是当我们需要将一个已有的类库或者对象与我们的系统接口相匹配时。汽车适配器的...

    PHP设计模式(五)适配器模式Adapter实例详解【结构型】

    适配器模式(Adapter Pattern)是一种结构型设计模式,它旨在解决不同接口之间不兼容的问题,使得原本不能协同工作的类可以协同工作。在PHP中,适配器模式可以帮助开发者将一个类的接口转换为客户期望的另一个接口,...

    设计模式——适配器模式(adapter)

    适配器模式(Adapter Pattern)是软件设计模式中的一种,其主要目的是解决系统中的接口不兼容问题,使得原本由于接口不匹配而无法一起工作的类能够协同工作。在本文中,我们将深入探讨适配器模式的概念、结构、作用...

    设计模式C++学习之适配器模式(Adapter)

    适配器模式(Adapter)是软件工程中一种常用的设计模式,它允许两个不兼容的接口之间进行通信。在C++编程中,适配器模式能够帮助我们复用现有的类,或者将第三方库的接口与我们的系统接口进行对接,从而提高代码的可...

    设计模式之 适配器 Adapter C++ 源码

    设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式...

    java设计模式之适配器模式

    适配器模式(Adapter Pattern)是通过创建一个新的对象(适配器),这个对象将原本不兼容的对象接口转换为客户端期望的接口,从而使两者能够协同工作。适配器模式可以分为类适配器和对象适配器两种类型。 1. 类...

    适配器(Adapter)模式

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在软件工程中,当系统中存在两种不兼容的接口或者类需要协同工作时,适配器模式可以发挥关键作用。通过适配器,我们可以复用现有的类,而无需...

    设计模式之适配器模式Java实现和类设计图

    文件列表中的"adapter"可能包含了适配器模式的Java源代码文件,这些文件通常会包含以上提到的三个角色的定义。例如,可能会有`Target.java`(目标接口),`Adaptee.java`(被适配者类),以及`Adapter.java`(类...

    适配器模式(Adapter)demo

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在软件开发中,我们常常遇到这样的情况:一个系统中的组件需要与另一个系统或库中的组件交互,但它们之间的接口不匹配,这时候就需要适配器模式...

    设计模式之适配器模式(Adapter Pattern)

    适配器模式是软件设计模式中的一种,它的主要目的是解决接口不兼容问题,使得原本由于接口差异无法协同工作的类能够协同工作。在实际的软件开发过程中,我们常常遇到这样的情况:旧有的系统或第三方库提供了丰富的...

    设计模式之适配器模式

    2. 适配器(Adapter)类:这是适配器模式的核心,它实现了目标接口,并持有对适配者对象的引用。适配器类负责将适配者的接口转换为目标接口。 3. 适配者(Adaptee)类:这是需要适配的原始接口或类,它的接口与目标...

    C#设计模式—适配器模式应用实例

    3. **适配器(Adapter)**:这个类是适配器模式的核心,它实现了目标接口,并持有对适配者的引用,负责将适配者的接口转换为目标接口。 在这个实例中,我们有以下文件: - `App.config`:通常用于存储应用程序配置...

    适配器模式demo源码

    适配器模式是一种常用的设计模式,它在软件开发中起到了桥梁的作用,允许两个不兼容的接口之间进行通信。在这个“适配器模式demo源码”中,我们可以深入理解这一模式的实现方式及其应用场景。 适配器模式的核心思想...

    设计模式 之 “适配器模式[Adapter Pattern]”

    适配器模式(Adapter Pattern)是软件设计模式中的一种,其主要目的是使两个不兼容的接口之间能够协同工作。在IT行业中,我们经常遇到不同系统、库或组件之间的接口不一致,导致它们无法直接交互。适配器模式就提供...

    设计模式 - 适配器模式(C++实例)

    在`DesignMode_Adapter`这个压缩包文件中,可能包含了相关的C++源码示例,演示了如何创建和使用适配器模式。这些源码可能包括了目标接口、原始接口、适配器类的定义以及客户端如何通过适配器进行调用的示例。通过...

    Adapter(适配器模式)

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在软件工程中,当系统中存在已有的类或库,而我们希望使用它们的功能,但其接口与我们的需求不匹配时,适配器模式就显得尤为重要。通过适配器,...

    适配器模式案例代码

    适配器模式可以通过创建一个Adapter类,实现新的DBConnection2接口,内部持有DBConnection实例,并在Adapter类中转换调用方法,使得客户端可以统一地使用DBConnection2接口。 5. **实现注意事项**: - 适配器的...

Global site tag (gtag.js) - Google Analytics