设计模式: 结构型之适配器模式(8)

代码设计:设计模式:10个结构型设计模式 以顺序表结构为基础,在表中传递数据或事件 举例:Java/Android的类加载机制以树状结构为基础,树中传递数据或事件 举例:Android的ViewTreeA->Mediator->B(->代表依赖)Mediator作为中介者,实现间接的A调用B的方法Adapter作为中介者,负责复用旧代码,完成新功能装饰器作为中介者,负责扩展旧的功能,在旧的功能的基础上添加新的代码代理器作为中介者,负责对旧功能是否能实现进行 阅读详情

适配器模式概述

  • 适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一种接口,从而使得原本不兼容的类可以一起工作
  • 在开发中,适配器模式经常用于解决接口不兼容、第三方库或组件的集成等问题
  • 适配器模式通常用于以下几种情况
    • 当你想使用现有的类,但是其接口不符合你的需求
    • 当你想创建一个可以重复使用的类,可以与其他不相关的类或遗留系统协同工作

适配器模式示例

  • 由于现实中阿里云、腾讯云和华为云的API接口是私有的,而且各有差异,我将基于假设的接口结构来给出一个适配器模式的示例

  • 这里我们将假设这三家云服务商都有重启实例的接口,但参数和命名方式有所不同

    // 定义一个标准的重启接口
    interface StandardRestartService {
      restartInstance(provider: string, instanceId: string): Promise<void>;
    }
    
    // 阿里云接口模拟
    class AliyunRestartService {
      async restartAliyunInstance(id: string): Promise<void> {
        // 实际阿里云重启实例的API调用
        console.log(`阿里云重启实例:${id}`);
      }
    }
    
    // 腾讯云接口模拟
    class TencentRestartService {
      async restartTencentInstance(tid: string): Promise<void> {
        // 实际腾讯云重启实例的API调用
        console.log(`腾讯云重启实例:${tid}`);
      }
    }
    
    // 华为云接口模拟
    class HuaweiRestartService {
      async restartHuaweiInstance(hid: string): Promise<void> {
        // 实际华为云重启实例的API调用
        console.log(`华为云重启实例:${hid}`);
      }
    }
    
    // 现在,我们创建适配器类来适配这些不同的接口
    class AliyunRestartAdapter implements StandardRestartService {
      private aliyunService = new AliyunRestartService();
    
      async restartInstance(provider: string, instanceId: string): Promise<void> {
        if (provider === 'aliyun') {
          return this.aliyunService.restartAliyunInstance(instanceId);
        } else {
          throw new Error('不支持的云服务商');
        }
      }
    }
    
    class TencentRestartAdapter implements StandardRestartService {
      private tencentService = new TencentRestartService();
    
      async restartInstance(provider: string, instanceId: string): Promise<void> {
        if (provider === 'tencent') {
          return this.tencentService.restartTencentInstance(instanceId);
        } else {
          throw new Error('不支持的云服务商');
        }
      }
    }
    
    class HuaweiRestartAdapter implements StandardRestartService {
      private huaweiService = new HuaweiRestartService();
    
      async restartInstance(provider: string, instanceId: string): Promise<void> {
        if (provider === 'huawei') {
          return this.huaweiService.restartHuaweiInstance(instanceId);
        } else {
          throw new Error('不支持的云服务商');
        }
      }
    }
    
    // 根据云服务商类型选择相应的适配器来重启实例
    async function restartAnyCloudInstance(provider: string, instanceId: string, adapter: StandardRestartService) {
      await adapter.restartInstance(provider, instanceId);
    }
    
    // 使用示例
    const aliyunAdapter = new AliyunRestartAdapter();
    restartAnyCloudInstance('aliyun', 'your-alibaba-instance-id', aliyunAdapter);
    
    const tencentAdapter = new TencentRestartAdapter();
    restartAnyCloudInstance('tencent', 'your-tencent-instance-id', tencentAdapter);
    
    const huaweiAdapter = new HuaweiRestartAdapter();
    restartAnyCloudInstance('huawei', 'your-huawei-instance-id', huaweiAdapter);
    
  • 请注意,实际场景中,你应该使用真实的云服务商SDK来替换模拟的API调用部分

  • 同时,适配器的设计可能会更复杂,需要根据实际情况处理错误和异常情况

适配器应用场景


1 ) 第三方库接口适配

  • 当使用第三方库时,可能发现该库的接口与项目中的其他代码不兼容
  • 此时,可以创建一个适配器来转换第三方库的接口,使其与项目中的代码兼容
  • 例如,假设有一个第三方库用于处理表单验证,但它提供的验证方法不是项目中期望的
  • 可以通过适配器来封装第三方库的验证方法,提供与项目中其他代码一致的接口

2 )浏览器API适配

  • 浏览器提供的API在不同版本中可能有所不同,或者不同浏览器之间的API存在差异
  • 使用适配器模式可以封装这些差异,提供统一的接口给前端代码使用
  • 例如,处理文件上传时,不同的浏览器可能有不同的API来处理文件读取和上传
  • 可以创建一个适配器来封装这些差异,使得前端代码只需要调用一个统一的接口来处理文件上传

3 ) 组件库适配

  • 在使用组件库时,可能会遇到组件库的API与项目需求不匹配的情况
  • 通过适配器模式,可以创建符合项目需求的接口,并在适配器内部调用组件库的API
  • 例如,某个组件库提供的按钮组件没有禁用状态(disabled)的属性,但项目中需要这个功能
  • 可以创建一个适配器,该适配器继承自组件库的按钮组件,并添加禁用状态的处理逻辑

4 )总结

  • 适配器模式在开发中非常有用,它允许我们处理接口不兼容的问题,将不兼容的接口转换为客户端所期望的接口
  • 通过适配器模式,我们可以更加灵活地集成第三方库、处理浏览器API的差异以及定制组件库的行为,从而提高代码的可维护性和可重用性
【Java设计模式】Java设计模式之(十七)适配器模式(Adapter Pattern) 这种类型的设计模式属于结构型模式。 一、适配器模式介绍 1.1 含义 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。 我们通过下面的实例来演示适配器模式的使用。其中,音频播放器设备只能播放 mp3 文件,通 阅读详情

相关推荐

结构型设计模式(7种)

这是本周讲课内容,花了大概一周时间准备,上csdn、github、z-library上找了不少材料,花了不少心血。最后因为时间原因这周讲课大概率也讲不了了,索性先写成博客发出来,供以后复习设计模式时回头看。

yuanyajieh的博客 1325

设计模式复习笔记 (8)结构型模式:适配器模式

结构型模式概述 :结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。结构型模式可以分为类结构型模式和对象结构型模式: 类结构型模式关心类的组合,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系。 对象结构型模式关心类与对象的组合,通过关联关系使得在一个类中定义

qq_33303925的博客 385

实战避坑:泛微E9流程接口与单点登录(SSO)开发全解析(含自定义Action、Restful API与免密登录)

本文深入解析泛微E9流程接口与单点登录(SSO)开发中的关键技术与避坑指南,涵盖自定义Action开发、Restful API鉴权机制及跨系统单点登录实现。通过实战案例与代码示例,帮助开发者高效完成二次开发,解决系统集成中的数据孤岛问题,提升企业信息化建设效率。

weixin_42549451的博客 675

【设计模式】第8节:结构型模式之“适配器模式”

适配器模式是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。

zuzhiang的博客 422

CocosCreator 面试题(十七)Cocos creator 固定宽度与固定高度的底层原理是什么?Cocos creator是如何做适配的?

通过固定宽度或固定高度的适配方式,可以使游戏在不同屏幕尺寸上保持一定的一致性,确保游戏中的元素的大小和位置相对稳定。具体选择哪种适配方式取决于你的游戏需求和设计考虑。在 Cocos Creator 中,你可以通过设置「设计分辨率」和使用相对坐标和布局方式来实现固定宽度或固定高度的适配。总之,Cocos Creator 提供了多种适配方式和工具,帮助你在不同屏幕尺寸上保持游戏画面的一致性。在 Cocos Creator 中,固定宽度和固定高度是两种常见的适配方式,用于在不同屏幕尺寸上保持游戏画面的一致性。

w风雨无阻w的专栏 1688

51单片机IAP技术详解:从原理到实战,实现远程程序自更新

在嵌入式系统开发中,程序更新是产品维护和功能迭代的核心需求。传统方式依赖外部烧录器,操作繁琐且无法远程进行。IAP(在应用中编程)技术则从原理层面解决了这一难题,它允许单片机在运行过程中通过特定接口(如串口)动态修改自身的Flash程序存储器。这项技术的核心价值在于赋予设备远程升级和自主维护的能力,极大地延长了产品生命周期并降低了维护成本。其典型应用场景包括智能家居控制器、工业数据采集模块和远程仪表等部署后不便拆卸的设备。本文以经典的51单片机(如STC89C52)为例,深入剖析IAP的实现,其中Bootl

weixin_29161719的博客 407

[导入]C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构型模式).zip(8.61 MB)...

讲座内容: 本培训课程探讨GoF23之 Adapter 适配器模式的意图、动因、原理、应用场景与C#语言实现,以及该模式在.NET框架程序设计中的具体应用。 课程讲师: 李建忠 上海祝成信息科技有限公司 高级培训讲师 MSDN特邀讲师 .NET技术专家,C++ CLI 专栏作家。南京邮电学院毕业,历任程序员,高级程序员,开发主管。现为上海祝成科技软件架构师,高级培训讲师。译著Microso...

weixin_30918415的博客 87

从零搭建IoT数据中台:STM32+WebSocket实现边缘设备与Web端实时双向通信

本文详细介绍了如何从零搭建基于STM32和WebSocket协议的IoT数据中台,实现边缘设备与Web端的实时双向通信。通过硬件选型、协议设计、服务器搭建及安全优化,提供了一套低延迟、高并发的企业级解决方案,适用于智能农业和工业监控等场景。

tea88的博客 750

设计模式第9讲——适配器模式(Adapter)

适配器模式是一种结构型设计模式,它允许将不兼容的对象转换成可兼容的接口。主要目的是解决在不改变现有代码的情况下,使不兼容的接口之间能够正常工作,通过创建一个中间转换的适配器来将一个对象转换成我们所需要的接口。当我们去国外旅游时,我们可能只会汉语,而当地人只会英语,那么这个时候就需要一个翻译员(翻译软件)来帮助我们。这就类似于适配器模式,通过一个适配器将一个不兼容的接口转成另外一个接口。下面以翻译为例,介绍一下类、接口、对象适配器。

让~学习~成为一种习惯(橡 皮 人の技术博客) 3万+

【EMC专题】为什么芯片规格书ESD性能中看不到MM(机器放电模型)

器件级ESD包括三种类型,HBM人体放电模型、MM机械放电模型和CDM元件充电模型。但在芯片规格书中为什么只见到HBM模型与CDM模型,却没有看到MM模型的数据?

一点硬件 451

Halcon实例转OpenCVSharp--粘连物体分割与计数(基于距离变换+分水岭算法) (附源码)

本文作者Color Space,文章未经作者允许禁止转载! 本文将介绍OpenCVSharp应用实例--粘连物体分割与计数(基于距离变换+分水岭算法)! 本文使用的OpenCVSharp版本---》v4.5.3。 实现目标:将下图中的硬币分割出来并计算数量。 预期效果图: ...

Color Space的博客 2421

设计模式之美(8)-结构型-适配器模式

适配器模式的原理与实现 适配器模式(Adapter Design Pattern)。这个模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。 适配器模式有两种实现方式:类适配器和对象适配器。 类适配器使用继承关系来实现,对象适配器使用组合关系来实现。 // 类适配器: 基于继承 public interface ITarget { void f1(); void f2(); void fc(); } public class Adap

就是不掉头发 41万+

OpenCASCADE:Direct3D CSharp 示例

OpenCASCADE:Direct3D CSharp 示例OpenCASCADE:Direct3D CSharp 示例 OpenCASCADE:Direct3D CSharp 示例 此示例演示了如何在使用CSharp和Windows Presentation Foundation (WPF)编写的.Net应用程序中使用 OCCT 和 DirectX 库。 .Net、OCCT (C++) 和 DirectX 级别之间的连接由用 C++/CLI 编写的代理库OCCProxy和D3DProxy提供。代理库OCC

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1828

设计模式之结构型模式

享元模式和门面模式都是结构型模式 享元模式 所谓享元模式就是运行共享技术有效地支持大量细粒度对象的复用。系统使用少量对象,而且这些都比较相似,状态变化小,可以实现对象的多次复用。 共享模式是支持大量细粒度对象的复用,所以享元模式要求能够共享的对象必须是细粒度对象。 在了解享元模式之前我们先要了解两个概念:内部状态、外部状态。 内部状态:在享元对象内部不随外界环境改变而改变的共享部分。 ...

qq_37209293的博客 23万+

第95章 安全工程师:Shell 脚本实现安全扫描、漏洞检测、日志审计

随着网络安全威胁日益复杂,传统的手动安全管理已无法满足现代企业的安全需求。Shell 脚本为安全工程师提供了强大的自动化能力,能够实现 7×24 小时的安全监控、快速漏洞扫描、智能日志分析和实时威胁响应。本章将系统介绍如何使用 Shell 脚本构建完整的安全防护体系,从基线检查到实时监控,帮助你打造自动化的安全运维能力。

猪猪侠 91

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

设计模式之结构型:适配器模式

适配器模式是一种​​结构型设计模式​​,用于解决两个不兼容接口之间的兼容性问题。它通过​​包装对象​​的方式,将已有接口转换为客户端期望的接口,类似电源适配器的功能。

keep simple 624

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

设计模式Python版 适配器模式

介绍了GOF设计模式中的适配器模式,以及用Python实现适配器模式的示例。

分享、交流、合作 1770

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【设计模式】三大类:创建型模式、结构型模式、行为型模式

1 创建型模式 本人理解:以C++为例,创建对象时,用关键字new来创建(实例化)对象。用一个函数或类将new的过程封装起来,就是创建型模式。 《设计模式》中的描述: 创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。 一个类----创建型模式使用继承改变被实例化的类, 一个对象-创建型模式将实例化委托给另一个对象。 (看后,一头雾水) 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton

郭老二 5847

二十三种设计模式之适配器模式

适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户端期望的另一个接口。适配器让那些接口不兼容的类可以一起工作,从而提高了类的复用性。最常见的比喻是电源适配器。当你出国旅行时,可能会遇到电源插座与你的电子设备充电器不匹配的情况。这时,你需要一个电源适配器来转换插头的形状和电压,使得你的充电器能够适应当地的电源插座。目标接口:是你电子设备的充电器接口。被适配者:是目的地国家的电源插座。适配器:是实际的电源适配器,它连接了两者。

apple_64847327的博客 1645

C++设计模式(中):结构型模式

本文章将重点讲解结构型模式,也会根据上一篇博客的方式,分别从是什么,为什么,实现步骤,优缺点以及具体的实现代码四步来讲解具体的设计模式

WildPointer的博客 1215

设计模式学习笔记三:结构型模式(Structural Pattern)

声明:学习内容均来自《设计模式的艺术》这本书。

itman1010的博客 1658

【Java教程】Day20-06 设计模式:结构型模式——适配器模式

适配器模式(Adapter Pattern)是一种结构型设计模式,它的作用是将一个类的接口转换成客户期望的另一个接口,从而解决接口不兼容导致无法协同工作的问题。适配器模式常用于需要将不同接口的类进行组合、集成时,尤其是在老旧系统与新系统之间的接口适配中非常常见。

max202011161630的博客 1315

【适配器模式】设计模式系列: 穿越接口的时空隧道(架起接口间的桥梁)

本文探讨了适配器模式的核心概念及其应用场景,解答了如何判断何时采用该模式以及它的适用范围。总结了适配器模式的优势与局限,并提供了后续学习建议,帮助读者理解如何在实际项目中灵活运用此模式,从而提高软件设计的灵活性与可维护性。

欢迎来到我的技术空间!我是一名经验丰富的Java开发工程师,热衷于分享我在软件开发领域的知识和心得。在这个博客里,您会发现一系列关于Java编程的文章,包括最佳实践、技术趋势、代码优化技巧以及一些有趣的项目案例。无论是初学者还是有经验的开发者,都能在这里找 1037

适配器模式—结构型

结构型简介 结构型模式主要总结了一些类或对象组合在一起的经典结构,这些经典的结构可以解决特定应用场景的问题。结构型模式包括:代理模式、桥接模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式。 简介 适配器模式(Adapter Design Pattern),这个模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不匹配而不能一起工作的类能够在一起工作。 使用场景 1,想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能将来要引进的类一起工作

ezconn的博客 807

JAVA设计模式--结构型模式--适配器模式

JAVA设计模式--创建型模式--工厂方法模式

qq_42264638的博客 267

2、结构型设计模式

由于某些原因需要给某对象(目标对象)提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译器就生成,而动态代理代理类则是在 Java 运行时动态生成。动态代理又有 JDK 代理和 CGLib 代理两种如果去欧洲国家旅游的话,他们的插座如下图最左边,是欧洲标准。

h2806504347的博客 1524
上一篇: 设计模式: 结构型之享元模式(7)
下一篇: 设计模式: 结构型之桥接模式(9)
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值