`

适配器模式

阅读更多
        将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。  --- 《设计模式》GOF

        Adapter模式的宗旨就是,基于现有类所提供的服务,向客户端提供接口,以满足客户的期望。---《java设计模式 》

        对软件系统中,如果要复用以前的“现存对象”,但是这些对象所提供的接口并不一定能适应我们的新环境,我们就要将其转换成我们需要的接口,来供我们调用。Adapter模式通过定义一个新的接口(对要实现的功能加以抽象),和一个实现该接口的Adapter(适配器)类来透明地调用外部组件。这样替换外部组件时,最多只要修改几个Adapter类就可以了,其他源代码都不会受到影响。

        简单理解就是:我们需要实现某个功能,而现在实现这个功能的组件不必我们自己开发,可以通过第三方的组件(即别人的代码或者自己曾经写过的代码)来实现,但第三方组件的接口与现在所定义的接口不一致(即类名,方法名不一样),那么在不修改两方接口的情况下,可以通过采用适配器模式来解决这一问题。

适配器的UML图:



Target      即客户端给出的接口(此处不是java语言中的接口类型,而是指类名,方法名等等),也就是客户端需要调用的组件。
Adapter     即适配器
Adaptee     即第三方组件

根据Target是否是java接口类型,适配器可以分为类适配器和对象适配器。

类适配器:
        此时Target是一个java接口,其中定义了其所期望的功能,而此时的Adapter则通过继承Adaptee类并实现Target接口来完成。即
       
class Adapter extends Adaptee implements Target{} 



       假设现在Target的内容为:


interface operation {   
     public int add(int a , int b);      
} 


Adaptee的内容为:
      
public class Adaptee{
    public int addOpe(int a ,int b){
         return a+b;
    }
}


那么为了利用Adaptee类,类适配器Adapter可以写成:


public class Adapter extends Adaptee implements Target{
     public int add(int a , int b) {
        return addOpe(a,b);
     }
}



对象适配器:

此时Target可能是一个普通类,那么Adapter的实现可以通过继承Target,并将具体实现委托给Adaptee来完成。同样是前面的add例子:


class Target{
    public int add(int a , int b){}
}



Public class Adapter extends Target{

    Adaptee adaptee;

    Adapter(Adaptee adaptee){
       this.adaptee = adaptee ;
    }

    public int add(int a,int b){
       return adaptee.addOpe(a,b);
    }
}



总结:个人觉得适配器模式用到了面向对象语言中的多态的特性,根据客户端给出的组件是接口还是类,适配器通过实现接口或者继承类的方式来实现多态。 如果是实现接口,那么适配器则可以继承第三方组件,通过调用父类方法来完成功能。如果是继承,因为java中不支持多继承,适配器将具体操作委派给第三方组件来完成。这是根据客户端给出的组件类型来区分,个人认为即使客户端给出的组件是接口,也可以通过将具体实现委派给第三方组件来完成,因为设计模式的原则是:优先使用对象组合而不是类继承。这样适配器模式就很容易理解,就是客户端通过多态调用适配器,适配器通过使用第三方对象来完成具体功能。
分享到:
评论

相关推荐

    JAVA设计模式(抽象类与适配器模式)

    今天我们要探讨的是JAVA设计中的两个重要模式:抽象类与适配器模式。 首先,我们来理解一下“抽象”。抽象是面向对象编程的核心概念之一,它帮助我们处理对象的复杂性。在Java中,抽象通常通过抽象类来实现。抽象类...

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

    在这个Java实现中,我们将深入探讨适配器模式的两大类型:类适配器模式和对象适配器模式,并通过具体的代码示例和UML类图来阐述其工作原理。 首先,我们来理解适配器模式的基本概念。适配器模式就像现实生活中的...

    设计模式之适配器模式

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在解决系统间的兼容性和接口不匹配问题时。适配器模式的核心思想是将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而无法...

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

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在解决系统间的兼容性和接口不匹配问题时。适配器模式的核心思想是将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而无法...

    java 动态代理模式 适配器模式

    Java动态代理模式与适配器模式是两种在软件设计中常用的设计模式,它们都有各自的优点和应用场景。在Java中,动态代理模式主要依赖于Java的反射API和InvocationHandler接口,而适配器模式则用于解决不同接口之间的...

    java设计模式之适配器模式

    适配器模式是一种在软件工程中广泛使用的结构型设计模式,它允许两个不兼容的接口之间进行通信。在Java中,适配器模式扮演着重要的角色,尤其在处理遗留代码或者第三方库集成时,能够有效地解决接口不匹配的问题。...

    java中适配器模式案例

    适配器模式是一种设计模式,它允许不兼容的类或接口之间进行通信,通过创建一个适配器类作为中间桥梁,使得原本不匹配的接口能够协同工作。在Java中,适配器模式广泛应用于系统集成、旧代码复用以及第三方库的兼容性...

    适配器模式案例代码

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在这个案例中,我们关注的是如何通过适配器模式解决实际编程问题。文章《适配器模式案例代码》提供了具体的实现示例,链接指向了CSDN博主...

    设计模式-适配器模式(讲解及其实现代码)

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在处理系统集成、遗留代码重用以及不同接口之间兼容性问题时。适配器模式的主要目的是将两个不兼容的接口融合在一起,使得原本无法直接协作...

    适配器模式demo源码

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

    设计模式系列之适配器模式

    适配器模式是一种软件设计模式,它在不同的接口之间起到了桥梁的作用,使得原本由于接口不兼容而无法协作的类能够协同工作。这种模式的核心思想是将一个类的接口转换成客户希望的另一个接口,从而使原有类能适应新的...

    设计模式的适配器模式的例子

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,允许不同接口的类之间进行通信。适配器模式的核心思想是将一个类的接口转换成客户期望的另一个接口,使得原本由于接口不兼容而无法一起工作的类...

    实验七:适配器模式.rar

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在本实验中,我们将深入探讨适配器模式的概念、应用场景以及如何在实际编程中实现它。适配器模式通常分为类适配器和对象适配器两种形式。 ...

    适配器模式源代码

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,允许不兼容的接口之间进行通信。在这个源代码实例中,我们看到的是如何通过适配器模式来实现不同对象之间的协作,使得原本无法直接交互的系统组件...

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

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

Global site tag (gtag.js) - Google Analytics