设计模式之适配器模式(Java实现)

简介: 设计模式之适配器模式(Java实现)

一、认识适配器模式


目的:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的类能够一起工作。


适配器模式分为两种:类适配器模式、对象适配器模式,通常我们使用后者。


类适配器模式:对应适配器继承适配者,由于Java是单继承所以一般不使用类适配器模式会具有局限性。

优点:由于适配器类是适配者类的子类,因此可以再适配器类中置换一些适配者的方法,使得适配器的灵活性更强。

缺点:对于Java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为接口,不能为类,其使用有一定的局限性,不能将一个适配者类和他的子类同时适配到目标接口。

对象适配器模式:在适配器的构造器中添加适配者的参数,在使用适配器时传入适配者,就能够做到灵活使用。

优点:把多个不同的适配者适配到同一个目标,也就是说,同一个适配器可以把适配者类和他的子类都适配到目标接口。

缺点:与类适配器模式相比,要想置换适配者类的方法就不容易。

总体优缺点:


优点:通过适配器能够透明的调用目标接口;复用现存的类,程序员不需要修改原有代码而重用现在的适配者,在许多业务中符合开闭原则。

缺点:适配器编写过程中需要结合业务场景来考虑,会增加系统的复杂性;增加代码阅读难度,降低代码可读性。

包含角色:目标接口、适配者类、适配器类。


应用场景:


以前开发的系统存在满足新系统功能需求的类,但其接口同新系统的接口不一致。

使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同。

UML图如下:分别是继承(类适配器)与组合(对象适配器)的关系





二、实现适配器模式


2.1、类适配器与对象适配器模式


见adapter目录下代码:



需求说明:现在我有个电脑,有一个网线,但是电脑上的网线口与现在网线口不一致,此时我们需要一个适配器,通过使用适配器来连接网线实现上网!


适配者(网线):Reticle


//网线
public class Reticle {
    public void request(){
        System.out.println("插上网线上网");
    }
}


适配器接口:NetToUSB


//适配器接口
public interface NetToUSB {
    //作用:处理请求 将网线=>USB
    void handleRequest();
}


使用者(电脑):Computer


public class Computer {
    //进行上网
    public void net(NetToUSB adapter){
        //调用适配器的方法
        adapter.handleRequest();
    }
}


通过传入适配器(可以说接上)就能够使用网线了,使用网线的具体操作交由适配器完成。

现在就差一个具体适配器了,有了适配器我们就能够上网!!!


类适配器模式


具体适配器:Adapter


//类适配器实现
public class Adapter extends Reticle implements NetToUSB{
    @Override
    public void handleRequest() {
        super.request();
    }
}


实现适配器接口,并且继承网线,在实现方法中调用网线的连接操作。

测试代码:测试类Customer


public class Customer {
    //①测试继承方式的适配器
    public static void main(String[] args) {
        Computer computer = new Computer();//电脑
        Reticle reticle = new Reticle();//网线
        NetToUSB adapter = new Adapter();//适配器
        computer.net(adapter);
    }




问题说明:该适配器通过继承网线的方式来进行调用方法,这种就有弊端了,若是下次需要适配不同的连接线岂不是需要添加其他的适配器类(实现适配器接口)嘛,这样的话系统会变得更加复杂了。由于Java中是单继承,所以这个适配器仅仅只能服务于所继承的适配者。



对象适配器模式


具体适配器:Adapter2


//对象适配器实现
public class Adapter2 implements NetToUSB{
    private Reticle reticle;
    //传入指定的适配者
    public Adapter2(Reticle reticle){
        this.reticle = reticle;
    }
    @Override
    public void handleRequest() {
        reticle.request();
    }
}


对象适配器的话就是传入指定的适配者,在适配方法中调用适配者的方法即可!

测试代码:测试类Customer


//②测试组合方式的适配器
@Test
public void test01(){
    Computer computer = new Computer();//电脑
    Reticle reticle = new Reticle();//网线
    //将网线传入到适配器中(组合方式)
    NetToUSB adapter = new Adapter2(reticle);
    computer.net(adapter);
}



说明:通过使用对象适配器,能够将多个不同的适配者适配到同一个目标,也就是说,同一个适配器可以把适配者类和他的子类都适配到目标接口。



总结


1、通过使用适配器模式能够将一些原来老系统的接口通过适配器来使用到我们的新系统上去,类似于我们生活中的转接器。


2、适配器模式有两种方式:类适配器模式(适配器继承适配者方式)、对象适配器模式(适配器组合适配者方式)。建议使用对象适配器模式

相关文章
|
17天前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
33 0
[Java]23种设计模式
|
1天前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
1月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
1月前
|
设计模式 Java
Java设计模式
Java设计模式
26 0
|
1月前
|
设计模式 Java
Java设计模式之外观模式
这篇文章详细解释了Java设计模式之外观模式的原理及其应用场景,并通过具体代码示例展示了如何通过外观模式简化子系统的使用。
28 0
|
10天前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
12天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
5天前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
17 1
|
28天前
|
设计模式 Java Kotlin
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。对于快速学习Kotlin语法,推荐查看“简洁”系列教程。本文重点介绍了构建者模式在Kotlin中的应用与改良,包括如何使用具名可选参数简化复杂对象的创建过程,以及如何在初始化代码块中对参数进行约束和校验。
19 3
下一篇
无影云桌面