首页 > 其他分享 >设计模式(六)适配器模式详解

设计模式(六)适配器模式详解

时间:2024-10-24 10:51:12浏览次数:8  
标签:适配 适配器 接口 Adaptee 详解 adapter 设计模式 public

设计模式(六)适配器模式详解

结果型模式:从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题。

适配器模式简介

  • 定义:适配器模式是一种结构型模式,它不允许不兼容的接口协同工作。通过创建一个适配器类,将一个类的接口转换成客户端期望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作!

  • 主要用途:当希望复用现有的类,但其接口不符合当前需求时,可以使用适配器模式来解决接口不匹配的问题。

适配器模式的关键组件

  • Target(目标接口):客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口。本例中是:NetToUSB

  • Adaptee(被适配者):已经存在的类,但其接口与目标接口不兼容。

  • Adapter(适配器):实现了目标接口,并持有被适配者的实例,通过委托调用被适配者的方法来实现目标接口的功能。

  • Client(客户端):使用目标接口进行操作,而不关心具体的实现细节。本例中是:Computer 电脑类

实现方式

  1. 类适配器:通过继承被适配者类并实现目标接口来实现。

  2. 对象适配器:通过组合被适配者类并在适配器类中实现目标接口来实现。

Target(目标接口)
package com.briup.patterns_design.adapter;

/**
 * @author 35329
 * 接口转换器的抽象实现
 */
public interface NetToUSB {

    // 作用:处理请求,网线 => usb
    public void handleRequest();
}
Adaptee(被适配者)
package com.briup.patterns_design.adapter;

/**
 * @author 35329
 * 要被适配的类: 网线
 */
public class Adaptee {
    public void request(){
        System.out.println("连接网线上网!");
    }
}
Adapter(适配器)
/**
 * 1、继承(类适配器,单继承)
 *
 * @author 35329
 * 真正的适配器,需要连接USB,连接网线
 */
public class Adapter extends Adaptee implements NetToUSB{

    @Override
    public void handleRequest() {
        super.request();// 可以上网了~
    }
}
package com.briup.patterns_design.adapter;

/**
 * 2、组合(对象适配器:常用)
 * @author 35329
 * 真正的适配器,需要连接USB,连接网线
 */
public class Adapter2 implements NetToUSB{

    private Adaptee adaptee;

    public Adapter2(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public void handleRequest() {
        adaptee.request();// 可以上网了~
    }
}
Client(客户端)
package com.briup.patterns_design.adapter;

/**
 * @author 35329
 *
 * 客户端类:想上网,但是插不上网线
 */
public class Computer {

    // 我们的电脑需要连接上转接器才可以上网
    public void net(NetToUSB adapter){
        // 上网的具体实现 ,找一个转接头
        adapter.handleRequest();
    }

    public static void main(String[] args) {
        // 电脑、适配器、网线
        Computer computer = new Computer(); // 电脑
        Adaptee adaptee = new Adaptee(); // 网线
        Adapter adapter = new Adapter(); // 转接器

        computer.net(adapter);

        System.out.println("===============================");
        Adapter2 adapter2 = new Adapter2(adaptee);
        computer.net(adapter2);

    }
}

对象适配器优点(优先使用组合的方式)

  • 一个对象适配器可以把多个不同的适配者适配到同一个目标

  • 可以适配一个适配者的子类,由于适配器和适配者之间是关联关系,根据“里氏代换原则”,适配者的子类也可通过该适配器进行适配。

类适配器缺点

  • 对于Java、C#等不支持多重类继承的语言,一次最多只能适配一个适配类,不能同时适配多个适配者。

  • 在Java、C#等语言中,适配器模式中的目标抽象类只能为接口,不能为类,其使用有一定的局限性。

适用场景

  • 系统需要使用一些现有的类,而这些类的接口(如方法名)不符合系统的需要,甚至没有这些类的源代码。

  • 想创建一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。

 

标签:适配,适配器,接口,Adaptee,详解,adapter,设计模式,public
From: https://blog.csdn.net/2301_77032029/article/details/143194094

相关文章

  • 设计模式(五)原型模式详解
    设计模式(五)原型模式详解原型模型简介定义:原型模型是一种创建型设计模型,它允许通过克隆/复制现有对象来创建新的对象,而无需通过常规的构造函数进行实例化。这种方式的主要优势是在运行时不需要知道具体的类,只需一个实例对象即可。实现方法实现Cloneable接口:在Java中,如......
  • 【Linux】线程ID、线程封装(详解)
    线程ID认识线程ID怎么查看一个线程的ID呢?                                                       线程库NPTL提供了pthread_self函数,可以获得线程......
  • Dockerfile和docker-compose详解
    Dockerfile和docker-compose详解文章目录Dockerfile和docker-compose详解一、Dockerfile1.Dockerfile简介2.构建镜像3.Dockerfile命令(1)FROM(2)WORKDIR(3)RUN(4)COPY(5)EXPOSE(6)CMD二、docker-compose1.简介2.多服务实例(1)文件准备(2)启动服务(3)访问服务3.docker-compose的s......
  • JavaWeb开发实战详解
    JavaWeb开发在现代应用程序中有广泛的应用场景。以下是一些常见的JavaWeb应用类型及其示例:1.企业级应用特点:通常需要处理大量的数据和用户,具有复杂的业务逻辑,常用于企业内部。示例:客户关系管理(CRM)系统、企业资源计划(ERP)系统。技术栈:SpringFramework、Hibernate、JPA、Th......
  • Cursor零基础小白教程系列「进阶」 - Cursor 智能代码补全详解(Tab)
    最适合小白零基础的Cursor教程网站lookai.top相同作者,最新文章会在网站更新,欢迎收藏书签Cursor智能代码补全详解(Tab)概述Cursor的智能代码补全,也就是快捷键Tab,是其最强大和独特的AI辅助编程工具之一。本教程将详细介绍Tab功能的使用方法,通过掌握Tab功能,您将显著提......
  • 行为设计模式 -观察者模式- JAVA
    责任链设计模式一.简介二.案例2.1抽象处理者(Handler)角色2.2具体处理者(ConcreteHandler)角色2.3测试三.结论3.1优缺点3.2示例3.3要点前言这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。作者:神的孩子都在歌唱一.简介......
  • stm32入门教程--UART协议详解
    目录简介UART串口协议串行通信并行通信串行通信与并行通信的区别单工通信半双工全双工同步和异步的区别UART帧结构简介STM32是意法半导体公司推出的一款32位ARMCortex-M系列微控制器。UART、SPI和I2C是STM32中常用的串行通信协议。UART(通用异步收发器):UART是一......
  • Elasticsearch 在linux部署 及 Docker 集群部署详解案例示范
    1.在CentOS上安装和配置Elasticsearch在CentOS系统下,安装Elasticsearch主要分为以下步骤:1.1准备工作在开始安装之前,确保你的系统满足以下基本条件:CentOS版本要求:推荐使用CentOS7及以上版本。Java环境:Elasticsearch依赖于Java运行时环境(JRE)。需要确......
  • Java Spring的常用注解详解和案例示范
    1.Spring常用注解概述1.1@Component@Component是Spring的基础注解之一,它用于将类标记为Spring容器中的一个组件。通过@Component注解,Spring会自动将该类注册为一个Bean,供依赖注入使用。使用示例:@ComponentpublicclassUserService{publicvoidperf......
  • Java设计模式的学习之适配器模式
    适配器模式目录适配器模式适配器模式的主要角色包括:适配器模式的两种主要形式:应用场景:优点:缺点:适配器模式(AdapterPattern)是一种结构型设计模式,其主要目的是将一个类的接口转换成客户端期望的另一个接口,使得原本因接口不兼容而不能一起工作的类可以一起工作。适配器模式通常用......