`

Adapter适配器模式

阅读更多
GOF《设计模式》一书对Adapter模式是这样描述的:
   将一个类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作。

    这段话大致是说:我们需要一种方式,为一个功能正确但接口不合的对象创建一个新接口。例如,客户给我们如下需求:

1) 为都有“显示”(display)行为的点、线、正方形分别创建类。

2) 客户对象不必知道自己到底拥有点、线、还是正方形。它只需知道拥有这些形状中的一个。

也就是说,我们要用一个更高层次的概念将这些具体形状都涵盖进去,这个高层概念可以称为:“可显示的形状”。因此,我们需要创建一个接口Shape:

interface Shape{

    publicvoid display();

}

现在客户忽然间有让我们给这个系统增加一个画圆的功能。这个看起来很简单,只需定义一个Circle类来实现Shape接口,但是我们要给它编写display方法,这可不是件简单的事,假如此时我们正好发现一个XXCircle类,它有一个方法刚好可以完成这个功能,那么有没有更好的方法来利用它呢,这时我们就要用到Adapter模式了。XXCircle代码如下:

class XXCircle{

    public void displayCircle(){

       System.out.println("通过XXCircle.displayCircle()画圆");

    }

}

    Adapter模式有两种类型:

1)    对象Adapter模式,它依赖于一个对象(适配器)包含另一个对象(被适配的对象)。

class CircleObject implements Shape{

    public XXCircle circle;

    public CircleObject(XXCircle xxcircle){

    circle=xxcircle;

    }

    public void display() {

       circle.displayCircle();

    }

}

public class Client {

    public static void main(String[] args) {

       XXCircle circle=new XXCircle();

       CircleObject co=new CircleObject(circle);

       co.display();

    }

}

2)     类Adapter模式,它是通过多重继承来实现的(java中没有多继承,是通过接口来实现的)。

class CircleClass extends XXCircle implements Shape{

    public void display() {

       super.displayCircle();  

    }

}

public class Client {

    public static void main(String[] args) {

       CircleClass cc=new CircleClass();

       cc.display();

    }

}

    小结:Adapter模式是一个很常用的模式,它将一个(或多个)类的接口转换成我们需要类所具备的一个接口。它的实现方式是:创建一个具备所需接口的类,然后包装原有类的方法,这样实际上就包含了被适配的对象。它主要适用于以下几种情况:

1) 你希望使用他人编写的子程序或方法,因为你需要它所执行的功能。

2) 你无法将这个子程序直接加入程序中。

3) 子程序的接口或调用方式与需要使用它的相关对象不完全相同。

分享到:
评论

相关推荐

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

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

    Adapter 适配器模式

    C#面向对象设计模式 Adapter 适配器模式 视频讲座下载

    C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构型模式)

    C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构型模式) 体验课程

    C#面向对象设计模式纵横谈\7 结构型模式Adapter 适配器模式.zip

    在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第7节:结构型模式Adapter 适配器模式

    C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构型模式) (Level 300)

    适配器模式是一种在软件设计中广泛使用的结构型设计模式,它允许两个不兼容的接口之间进行通信。在C#编程环境中,适配器模式扮演着重要的角色,尤其是在需要将已有类库或组件与新系统集成时。适配器模式通过创建一个...

    Adapter适配器模式在JavaScript设计模式编程中的运用分析_.docx

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在JavaScript编程中,这种模式尤其适用于处理不同API之间的兼容性问题,比如在AJAX请求中,需要对接不同的日志记录系统,或者整合第三方库时。...

    Java设计模式之Adapter适配器模式

    Java设计模式之Adapter适配器模式 Java设计模式之Adapter适配器模式是一种结构型设计模式,主要用于解决不同接口之间的不兼容问题,使得原本由于接口不兼容不能一起工作的那些类可以一起工作。Adapter模式的主要...

    Adapter 适配器

    适配器模式可以分为类适配器模式和对象适配器模式。在这里,我们将深入探讨适配器模式的概念、实现方式以及在实际开发中的应用。 适配器模式的核心思想是通过创建一个适配器类,该类将被适配者(Adaptee)的接口...

    Adapter(适配器模式)

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

    Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比

    Java 适配器模式是一种设计模式,用于解决不同接口之间兼容性的问题,使得原本由于接口不匹配而不能一起工作的类能够协同工作。适配器模式主要有两类实现方式:类适配器模式和对象适配器模式。 类适配器模式是通过...

    java设计模式之适配器模式

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

    Python设计模式编程中Adapter适配器模式的使用实例

    在Python编程中,适配器模式是一种非常实用的设计模式,它允许不同的接口或类之间进行交互,即使它们的结构不兼容。适配器模式的主要目的是解决原有类的接口与现有需求之间的冲突,使得原本不能协作的类能够协同工作...

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

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

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

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

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

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

    通用的adapter适配器

    本项目“通用的adapter适配器”旨在提供一个适用于ListView和GridView的多功能适配器,简化了开发者在处理列表或网格视图时的数据绑定工作。下面我们将深入探讨这个通用适配器的核心概念、实现方式以及它在实际开发...

    设计模式之适配器模式

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

    Adapter适配器模式在JavaScript设计模式编程中的运用分析

    适配器模式是软件设计模式中的一种,它主要用于将一个类的接口转换成客户期望的另一个接口。该模式允许原本由于接口不兼容而不能一起工作的类能够协同工作。适配器模式的别名是包装器(wrapper)模式,在JavaScript...

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

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

Global site tag (gtag.js) - Google Analytics