小谈设计模式(18)—适配器模式

小谈设计模式(18)---适配器模式

专栏介绍

专栏地址

link

专栏介绍

主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。

适配器模式

适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。

角色分析

目标接口(Target)

客户端期望的接口,适配器将原始接口转换成目标接口。

源接口(Adaptee)

需要被适配的类或接口。

适配器(Adapter)

实现目标接口,同时持有源接口的实例,将目标接口的方法调用转发给源接口的实例。

核心思想

通过适配器将目标接口的方法调用转发给源接口的实例。这样一来,客户端就可以通过目标接口来使用源接口的功能。

应用场景

当需要使用一个已经存在的类,但其接口不符合需求时,可以使用适配器模式。例如,使用第三方库提供的接口,但需要将其转换成自己系统中的接口。

当需要复用一些已经存在的类,但是接口与系统的其他部分不兼容时,可以使用适配器模式。例如,将不同数据库的操作接口统一成一个接口。

Java程序实现

java 复制代码
// 目标接口
interface Target {
    void request();
}

// 源接口
class Adaptee {
    void specificRequest() {
        System.out.println("Adaptee: specificRequest");
    }
}

// 适配器
class Adapter implements Target {
    private Adaptee adaptee;

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

    @Override
    public void request() {
        adaptee.specificRequest();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Adaptee adaptee = new Adaptee();
        Target target = new Adapter(adaptee);
        target.request();
    }
}

输出结果

Adaptee: specificRequest

这说明适配器模式成功地将不兼容的接口转换成了兼容的接口,使得客户端可以使用目标接口来调用源接口的功能。

程序分析

1

在上面的示例中,我们有一个目标接口Target,其中定义了客户端所期望的方法request。我们还有一个源接口Adaptee,其中有一个不兼容的方法specificRequest。

2

为了使得客户端可以使用Target接口来调用specificRequest方法,我们创建了一个适配器Adapter,实现了Target接口,并持有一个Adaptee的实例。在适配器的request方法中,我们将Target接口的方法调用转发给Adaptee的specificRequest方法。

3

在客户端代码中,我们创建了一个Adaptee实例和一个适配器Adapter实例,并将Adaptee实例传递给适配器的构造函数。然后,我们使用Target接口来调用request方法,实际上是调用了Adaptee的specificRequest方法。

优缺点分析

优点

1

适配器模式可以让不兼容的接口协同工作。

2

适配器模式可以复用已有的类,而无需修改其源代码。

3

适配器模式可以将不同接口的类组合在一起工作。

缺点

1

适配器模式增加了系统的复杂性,因为需要增加一个适配器类。

2

适配器模式可能会降低系统的性能,因为需要进行额外的转换操作。

总结

适配器模式可以将不兼容的接口转换成兼容的接口,使得原本无法一起工作的类可以协同工作。它是一种非常常用的设计模式,可以提高系统的灵活性和可扩展性。

相关推荐
霁月风6 小时前
设计模式——适配器模式
c++·适配器模式
WaaTong7 小时前
《重学Java设计模式》之 单例模式
java·单例模式·设计模式
WaaTong9 小时前
《重学Java设计模式》之 原型模式
java·设计模式·原型模式
霁月风9 小时前
设计模式——观察者模式
c++·观察者模式·设计模式
暗黑起源喵12 小时前
设计模式-工厂设计模式
java·开发语言·设计模式
wrx繁星点点19 小时前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式
金池尽干21 小时前
设计模式之——观察者模式
观察者模式·设计模式
也无晴也无风雨21 小时前
代码中的设计模式-策略模式
设计模式·bash·策略模式
捕鲸叉1 天前
MVC(Model-View-Controller)模式概述
开发语言·c++·设计模式
wrx繁星点点1 天前
享元模式:高效管理共享对象的设计模式
java·开发语言·spring·设计模式·maven·intellij-idea·享元模式