适配器模式

简介: 适配器模式是一种结构型设计模式,将不兼容的接口转换为客户端期望的形式,使原本无法协作的类能协同工作。它通过引入适配器类,实现接口转换,提升系统复用性与灵活性,适用于整合遗留系统或第三方库,降低耦合度,增强可维护性。(238字)

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个接口转换为客户端所期望的另一种接口。适配器模式主要用于解决由于接口不兼容而导致的类无法工作的问��。它可以使原本由于接口不匹配而不能一起工作的类可以协同工作。

  1. 适配器模式的结构
    适配器模式通常包含以下几个角色:

目标接口(Target):客户端所期望的接口。
具体目标(ConcreteTarget):需要适配的接口的具体实现。
适配器(Adapter):将具体目标的接口转换为目标接口。
客户端(Client):使用目标接口的代码。

  1. 适配器模式的 UML 图
    plaintext
    +------------------+
    | Target |
    +------------------+
    | + request() |
    +------------------+
           ^
           |
    
    +-------+-------+
    | |
    +-------------------+ +----------------------+
    | Adapter | | ConcreteTarget |
    +-------------------+ +----------------------+
    | + request() | | + specific_request() |
    +-------------------+ +----------------------+
  2. 适配器模式的实现
    以下是一个 Python 中适配器模式的简单示例:

3.1 定义目标接口
python
class Target:
def request(self):
pass
3.2 实现具体目标
python
class ConcreteTarget:
def specific_request(self):
return "Specific request from ConcreteTarget."
3.3 实现适配器
python
class Adapter(Target):
def init(self, concrete_target: ConcreteTarget):
self._concrete_target = concrete_target

def request(self):
    # 调用具体目标的方法并转换结果
    return self._concrete_target.specific_request()

3.4 使用适配器模式
python
if name == "main":

# 创建具体目标实例
concrete_target = ConcreteTarget()

# 创建适配器
adapter = Adapter(concrete_target)

# 使用适配器来处理请求
print(adapter.request())  # 输出: Specific request from ConcreteTarget.
  1. 适配器模式的优缺点
    优点
    提高了类的重用性:通过适配器,可以重用已有的类,而无需修改它们。
    解耦:客户端与具体实现之间没有直接依赖,降低了系统的耦合度。
    灵活性:可以在运行时选择适配器,增加了系统的灵活性。
    缺点
    增加复杂性:引入适配器会增加系统的复杂性,可能导致代码的可读性降低。
    性能开销:适配器可能会引入额外的调用层,因此可能会略微影响性能。
  2. 何时使用适配器模式
    当你想要使用一些已经存在的类,但它们的接口不符合你的需求时。
    当你希望通过创建一个接口来使多个类相互协作时,尤其是在遗留系统中。
    当你希望在不修改原有类的情况下,增强或改变其接口时。
  3. 总结
    适配器模式是一种强大的结构型设计模式,可以帮助我们解决接口不兼容的问题。通过引入适配器,我们可以让不同的类协同工作,提高系统的灵活性和可维护性。在实际开发中,合理运用适配器模式可以有效地处理各种接口兼容性问题,提升代码的重用性和扩展性。
相关文章
|
5月前
|
存储 缓存 负载均衡
Gateway 网关坑我! 被这个404 问题折腾了一年?
小富分享了一个困扰团队一年多的 SpringCloud Gateway 路由 404 问题。通过日志追踪和源码分析,发现是网关在 Nacos 配置更新后未能正确清理旧的路由权重缓存,导致负载均衡时仍使用已删除的路由数据。最终通过监听路由刷新事件并手动更新缓存,成功解决了问题。
979 125
Gateway 网关坑我! 被这个404 问题折腾了一年?
程序员真的有必要把GC算法好好过一遍,因为它是进大厂必备的
最早的GC算法可以追溯到20世纪60年代,但到目前为止,GC的基本算法没有太多的创新,可以分为复制算法(Copying GC)、标记清除(MarkSweep GC)和标记压缩(Mark-Compact GC)。近些年推出的GC算法也都是在基础算法上针对一些场景进行优化,所以非常有必要理解基础的GC算法。
|
2月前
|
缓存 JSON JavaScript
TypeScript 快速上手指南
TypeScript是JavaScript的超集,支持静态类型,提升代码质量与可维护性。本文涵盖环境搭建、核心语法、实战示例及工程化配置,零基础也能快速上手,适合Vue3、React等大型项目开发。
|
Java Spring
【SpringBoot】SpringBoot自定义banner,成千上万种可供选择,当然也可以自定义生成哦
【SpringBoot】SpringBoot自定义banner,成千上万种可供选择,当然也可以自定义生成哦
2299 1
|
5月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
1977 0
|
2月前
|
存储 JSON JavaScript
JSON 快速上手指南
JSON是一种轻量级数据交换格式,语法严格,键名需双引号、值类型有限,支持跨语言解析。本文详解其语法规则、与JS对象区别、序列化/解析方法(stringify/parse)、实战应用及常见避坑技巧,助你快速掌握JSON核心技能。
|
2月前
|
JavaScript 前端开发 API
Vue.js 快速上手指南
Vue.js 是轻量级渐进式前端框架,核心聚焦视图层,上手简单、生态丰富。本文提供可直接复制的快速入门指南,涵盖 Vue3 组合式 API、响应式数据、指令、组件化、生命周期及 Axios 异步请求等实战内容,附完整示例与避坑提示,零基础也能快速搭建交互式页面,助力高效开发。
|
2月前
|
存储 关系型数据库 MySQL
B+ 树索引
B+树是MySQL InnoDB引擎的核心索引结构,具自平衡、有序存储特性,支持高效查找、插入、删除。所有数据存于叶子节点,且叶节点相连,利于范围查询。广泛用于读密集、排序及范围检索场景,显著降低磁盘I/O,提升查询性能,是数据库优化的关键技术。
|
2月前
|
自然语言处理 关系型数据库 MySQL
MySQL 全文索引
MySQL全文索引支持对CHAR、VARCHAR、TEXT字段进行高效文本搜索,适用于文章、评论等长文本。通过MATCH()与AGAINST()实现自然语言或布尔模式查询,支持分词、停用词过滤和最小词长设置。可创建于建表时或后期添加,适用于搜索引擎、CMS、电商等场景,提升关键词检索效率,但需权衡增删改开销与索引维护成本。(238字)
|
2月前
|
SQL 运维 分布式计算
如何做好SQL质量监控
SLS推出用户级SQL质量监控功能,集成于CloudLens for SLS,提供健康分、服务指标、运行明细、SQL Pattern分析及优化建议五大维度,助力用户全面掌握SQL使用情况,精准识别性能瓶颈与无效请求,提升日志分析效率与资源治理水平。