结构型模式-适配器模式

embedded/2024/11/30 0:24:30/

适配器模式(Adapter Pattern)是一种结构型设计模式,它的主要目的是将一个类的接口转换成客户期望的另一个接口,从而使原本接口不兼容的类可以协同工作。适配器模式常用于解决现有代码与新需求之间的兼容性问题。

适配器模式的核心要素

  • 目标接口(Target Interface)
    客户端期望使用的接口。

  • 需要适配的类(Adaptee)
    具有不兼容接口的类。

  • 适配器(Adapter)
    一个中间类,通过实现目标接口并包装被适配的类,使两者能够兼容。

分类

  • 类适配器(基于继承)
    适配器通过继承需要适配的类并实现目标接口完成适配。这种方式要求适配器不能同时继承其他类(因为 Java 中不支持多继承)。

  • 对象适配器(基于组合)
    适配器通过组合需要适配的类并实现目标接口来完成适配,更灵活,推荐使用。

  • 接口适配器(缺省适配器模式
    提供一个抽象类实现目标接口中的所有方法,具体适配器只需覆盖需要的方法即可,适用于接口方法较多的情况。

类适配器示例

java">// 目标接口
interface Target {void request();
}// 被适配的类
class Adaptee {void specificRequest() {System.out.println("Adaptee: Handling specific request.");}
}// 适配器类
class Adapter extends Adaptee implements Target {@Overridepublic void request() {specificRequest(); // 调用被适配类的方法}
}// 测试
public class Main {public static void main(String[] args) {Target adapter = new Adapter();adapter.request();}
}

对象适配器示例

java">// 目标接口
interface Target {void request();
}// 被适配的类
class Adaptee {void specificRequest() {System.out.println("Adaptee: Handling specific request.");}
}// 适配器类
class Adapter implements Target {private Adaptee adaptee;public Adapter(Adaptee adaptee) {this.adaptee = adaptee;}@Overridepublic void request() {adaptee.specificRequest(); // 调用被适配类的方法}
}// 测试
public class Main {public static void main(String[] args) {Adaptee adaptee = new Adaptee();Target adapter = new Adapter(adaptee);adapter.request();}
}

接口适配器(缺省适配器模式

java">// 定义一个包含多个方法的接口
interface Target {void method1();void method2();void method3();
}// 提供一个抽象类实现接口中的所有方法(默认实现为空)
abstract class AbstractAdapter implements Target {@Overridepublic void method1() {// 默认实现为空}@Overridepublic void method2() {// 默认实现为空}@Overridepublic void method3() {// 默认实现为空}
}// 实现类只需要关注自己感兴趣的方法
class ConcreteAdapter extends AbstractAdapter {@Overridepublic void method2() {System.out.println("ConcreteAdapter: Only implementing method2.");}
}// 测试
public class Main {public static void main(String[] args) {Target adapter = new ConcreteAdapter();adapter.method2(); // 只执行感兴趣的方法}
}

http://www.ppmy.cn/embedded/141607.html

相关文章

图片怎么转换成excel文件(客户端)

一、下载安装 访问官网:首先,请确保从金鸣识别的官方网站下载软件,以避免潜在的安全风险。下载安装:根据页面指引,下载并安装金鸣表格文字识别软件。 二、添加图片 打开软件:双击桌面上的金鸣识别图标&am…

语言模型中的挑战 – 独热编码 (One-Hot Encoding)

什么是独热编码 (One-Hot Encoding)? 独热编码是一种将类别数据(如单词)转换为数值格式的方法。在自然语言处理(NLP)中,词汇表中的每个单词都被表示为一个唯一的向量,其中只有一个位置是“1”&#xff0c…

python操作Elasticsearch

使用elasticsearch 6.x版本,操作es数据。 #! -*- coding:utf-8 -* import timefrom elasticsearch import Elasticsearch, helpersclass EstUtil:_instance Nonedef __new__(cls, *args, **kwargs):if not cls._instance:cls._instance super(EstUtil, cls).__ne…

英语知识在线平台:Spring Boot技术应用

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

部署kafka-exporter

docker容器部署 docker run -d --namegrafana -v /etc/localtime:/etc/localtime:ro --restartalways -p 23000:3000 grafana/grafanadocker run -d --nameprometheus -p 29090:9090 --restartalways -v /etc/localtime:/etc/localtime:ro -v /home/prometheus/prometheus.ym…

工业物联网网关在设备接入物联网中的核心作用

一、工业物联网网关的定义与功能 工业物联网网关是工业领域中的一种重要设备,它位于工业物联网系统的边缘位置,负责连接、管理和协调工业设备与云平台之间的通信。作为边缘计算的关键组件,工业物联网网关能够实现工业设备、传感器、PLC、DCS…

五天SpringCloud计划——DAY1之mybatis-plus的使用

一、引言 咱也不知道为啥SpringCloud课程会先教mybatis-plus的使用,但是教都教了,就学了吧,学完之后觉得mybatis-plus中的一些方法还是很好用了,本文作为我学习mybatis-plus的总结提升,希望大家看完之后也可以熟悉myba…

Flink--API 之Transformation-转换算子的使用解析

目录 一、常用转换算子详解 (一)map 算子 (二)flatMap 算子 (三)filter 算子 (四)keyBy 算子 元组类型 POJO (五)reduce 算子 二、合并与连接操作 …