`

《设计模式》之十四:适配器模式

阅读更多

Adapter Pattern 适配器模式的定义如下:

Convert the interface of a class into another interface clients expect. Adatper lets classes work together that couldn't otherwise because of incompatiable interfaces

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

适配器模式又叫变压器模式,也叫包装模式,包装模式还包括装饰模式。

 

适配器模式的三个角色:

1,Target目标角色,定义把其它类转换成何种接口,也就是我们的期望接口。

2,Adaptee源角色,你想把谁转换成目标角色

3,Adapter适配器角色,核心角色,职责非常简单:把源角色转换成目标角色,怎么转换呢。一般通过继承或者类关联的方式。

 

模板代码:

public interface ITarget {
    public void request();
}

 

public class Target implements ITarget {
    @Override
    public void request() {
        System.out.println("if you need any help, pls call me!");
    }
}

 

public class Source {
    // 原有的业务逻辑
    public void doSomething() {
        System.out.println("I'm kind of busy, leave me alone, pls");
    }
}

 

public class Adapter extends Source implements ITarget {
    @Override
    public void request() {
        super.doSomething();
    }
}

 

最后是场景应用类:

public class Client {
    public static void main(String[] args) {
        // 原有的业务逻辑
        ITarget target = new Target();
        target.request();

        // 增加适配器后的业务逻辑
        ITarget target1 = new Adapter();
        target1.request();
    }
}

 

适配器模式的优点:

1,适配器模式可以让两个没有任何关系的类在一起运行

2,增加了类的透明性

3,提高了类的复用度

4,灵活性非常好

 

适配器模式使用场景:

只要记住一点就够了:你有动机修改一个已经投入生产中的接口,记住是已经投入了生产,适配器模式可能是你最适合的模式。

 

注意:项目一定要遵守依赖倒置原则和李氏替换原则(说白了就是面向抽象和接口编程),否则即使在适合使用适配器模式的场景下也会带来非常大的改造。

 

适配器模式的扩展:

之前我们将的是Source接口只有一个的情况,如果有多个怎么办,那么我们可以利用聚合的方法,在Adapter里面放几个Source的接口,然后在构造函数中传递真正的Source对象,Adapter还是继承自Target,只不过之后将Target接口方法的实现委托给内部的几个Source对象来处理,也称委托模式。

 

前面一种通过继承的叫类适配模式器,而后面的通过聚合的叫对象适配模式器。

实际项目中,对象适配器使用最多,因为组合优于继承,灵活性更高一点。

 

最佳实践:

适配器模式是一个补偿模式,或者说是一个不就模式,在完美设计中不会使用到。不过再完美的设计也会有想不到的地方,需求变更无止境。适配器模式通过把非本系统接口的对象包装成本系统可以接受的对象,从而简化了系统大规模变更风险的存在。

 

本人博客已搬家,新地址为:http://www.pycoding.com/

分享到:
评论

相关推荐

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

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

    实验七:适配器模式.rar

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

    java设计模式之适配器模式

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

    第十六讲:适配器模式

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在软件工程中,当系统中存在一个已经存在的组件或者第三方库,但其接口与我们新设计的系统不匹配时,适配器模式就显得尤为重要。适配器模式通过...

    23种设计模式--适配器模式

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在软件工程中,这种模式常被用来解决旧系统与新系统、第三方库或者不同组件之间的接口不匹配问题。适配器模式的核心思想是通过创建一个新的类...

    设计模式之适配器模式

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,主要解决系统间接口不兼容的问题。适配器模式允许不同接口的类协同工作,通过创建一个适配器对象来转换不兼容的接口,使得原本由于接口不匹配而...

    Python 程序语言设计模式思路-结构型模式:适配器模式-将不兼容的接口转换为可兼容的接口

    适配器模式(Adapter Pattern)是一种结构型设计模式,旨在将一个类的接口转换为客户端期望的另一个接口,从而使原本由于接口不兼容而无法一起工作的类能够协同工作。适配器模式通过引入一个适配器类,解决了接口不...

    设计模式之--适配器模式

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

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

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

    23种设计模式详解PDF

    适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式(11): 策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、...

    设计模式:结构型-适配器模式

    适配器模式是一种结构型设计模式,用于解决两个不兼容接口之间的问题,它充当了两者之间的桥梁。适配器模式可以分为三种类型:类适配器模式、对象适配器模式和接口适配器模式。 类适配器模式中,适配器类通过继承...

    .NET设计模式(8):适配器模式(AdapterPattern)

    ### .NET设计模式(8):适配器模式(AdapterPattern) #### 概述 在软件工程领域,尤其是在.NET框架下的应用开发过程中,经常会遇到这样的情况:现有的某个类或者组件的功能非常优秀,但由于其接口与当前项目的...

    .Net设计模式_适配器模式

    1. 类适配器模式:适配器类继承自待适配的类,并且实现目标接口。在.NET中,这意味着适配器类会扩展待适配类的功能,同时提供符合目标接口的方法。这种方式的优势在于可以利用继承的多态性,但缺点是无法适应多个...

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

    1. 类适配器模式: 在类适配器模式中,适配器类继承自目标接口,并且通常也包含对原始不兼容接口的引用。适配器类通过重写或实现目标接口的方法,调用原始接口的方法,从而达到接口转换的目的。这种方式在C++中常见...

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

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,允许不兼容的接口之间进行通信。在这个Java实现中,我们将深入探讨适配器模式的两大类型:类适配器模式和对象适配器模式,并通过具体的代码示例和...

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

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

Global site tag (gtag.js) - Google Analytics