首页 > 其他分享 >适配器模式(Adapter Pattern)

适配器模式(Adapter Pattern)

时间:2023-05-12 18:56:37浏览次数:34  
标签:Pattern 适配器 模式 客户 接口 适配 现有 Adapter

模式动机

适配器模式(AdapterPattern)是一种使用频率非常高的结构型模式,如果在系统中存在不兼容的接口,可以通过引入一个适配器来使得原本因为接口不兼容而不能一起工作的两个类可以协同工作。适配器模式中适配器的作用与现实生活中存在的电源适配器、网络适配器等作用相同。在引入适配器后,无需对原有系统进行任何修改,且更换适配器或者增加新的适配器都非常方便,系统具有较好的灵活性和扩展性。适配器模式可看做是一种对现有系统进行补救以及对现有类进行重用的模式

  • 通常情况下,客户端可以通过目标类的接口访问它所提供的服务。有时,现有的类可以满足客户类的功能需要,但是它所提供的接口不一定是客户类所期望的,这可能是因为现有类中方法名与目标类中定义的方法名不一致等原因所导致的。

如现在目标类中定义的方法名为method1( ),客户端已经针对该方法进行编程,而现有类中的方法method2( )恰好满足客户端的要求,如何在不修改原有目标类和客户端代码的基础上确保能够使用到现有类中的method2( )方法,就是适配器模式所要解决的问题


也就是说,当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法,而这个过程对客户类是透明的,客户类并不直接访问适配者类。因此,适配器可以使由于接口不兼容而不能交互的类可以一起工作,这就是适配器模式的模式动机。

模式定义

  • 适配器模式也称为包装器(Wrapper)模式。
  • 适配器模式(AdapterPattern):将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作。
  • 它既可以作为类结构型模式,也可以作为对象结构型模式。
  • 在适配器模式的定义中所提及的接口是指广义的接口,它可以表示成一个方法或者方法的集合。

模式结构


类适配器

image

对象适配器

image


模式分析

  • 适配器模式可以将一个类的接口和另一个类的接口匹配起来,使用的前提是不能或不想修改原来的适配者接口和抽象目标类接口。如向第三方购买了一些类、控件,如果没有源代码,这时使用适配器模式可以统一对象访问接口。
  • 适配器模式更多的是强调对代码的组织,而不是功能的实现。
  • 类适配器模式违背了合成复用原则。类适配器是客户类有一个接口规范的情况下可用,反之不可用。
  • 适配者类无法继承时,只能用对象适配器。

  • 模式优点
    • 将目标类和适配者类解耦
    • 增加了类的透明性和复用性,提高了适配者的复用性
    • 灵活性和扩展性非常好,更换(增加)适配器,符合开闭原则。
    • 类适配器模式:由于继承关系,置换一些适配者的方法很方便
    • 对象适配器模式:可以把多个不同的适配者适配到同一个目标,还可以适配一个适配者的子类
  • 模式缺点
    • 类适配器模式
      (1) 一次最多只能适配一个适配者类,不能同时适配多个适配者
      (2) 适配者类不能为最终类(final)
      (3) 目标抽象类只能为接口,不能为类
    • 对象适配器模式
      在适配器中置换适配者类的某些方法比较麻烦
  • 使用情形
    • 系统需要使用一些现有的类,而这些类的接口不符合系统的需要,甚至没有这些类的源代码
    • 创建一个可以重复使用的类,用于和一些彼此之间没有太大关联的类,包括一些可能在将来引进的类一起工作

标签:Pattern,适配器,模式,客户,接口,适配,现有,Adapter
From: https://www.cnblogs.com/sorrymine/p/17393982.html

相关文章

  • Java设计模式-适配器模式
    适配器模式(AdapterPattern)是一种常见的设计模式,它主要用于在不改变现有系统结构的情况下,将一个类的接口转换成客户端所期望的另一个接口。在本文中,我们将介绍适配器模式的基本概念、实现方法以及优缺点,并探讨适配器模式在Java编程语言中的具体应用。简介适配器模式是一种结构型......
  • 原型模式(Prototype Pattern)
    模式动机原型模式(PrototypePattern)结构较为简单,它是一种特殊的创建型模式,当需要创建大量相同或者相似对象时,可以通过对一个已有对象的复制获取更多对象。Java语言提供了较为简单的原型模式解决方案,只需要创建一个原型对象,然后通过在类中定义的克隆方法复制自己。该模式应用较......
  • 建造者模式(Builder Pattern)
    模式动机建造者模式(BuilderPattern)是最复杂的创建型模式,它用于创建一个包含多个组成部分的复杂对象,可以返回一个完整的产品对象给用户。它通过将客户端与包含多个组成部分的复杂对象的创建过程分离,使得客户端无需知道复杂对象的内部组成部分与装配方式,只需要知道建造者的类型......
  • 单例模式(Singleton Pattern)
    单例模式模式动机单例模式(SingletonPattern)是结构最简单的设计模式,它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以确保系统中一个类只有一个实例,且该实例易于被外界访问,从而方便对实例个数的控制并节约系统资源。如何确保一个类只有一个实例并且这个实......
  • [Typescript] Builder pattern 07- Reducer
    import{Expect,Equal}from"../types/utils"import{expect,it}from'vitest';typePayloadsToDiscriminatedUnion<TextendsRecord<string,any>>={[KinkeyofT]:{type:K}&T[K];}[keyofT];exportclas......
  • SLQ_C# DataAdapter数据适配器的4个属性
    DataAdapter数据适配器的4个属性:1.SelectCommand属性:向数据库发送查询SQL语句。2.DeleteCommand属性:向数据库发送删除SQL语句。3.InsertCommand属性:向数据库发送插入SQL语句。4.UpdateCommand属性:向数据库发送更新SQL语句。......
  • 适配器模式
    适配器模式2个接口,普通播放器,高级播放器普通播放器MediaPlayerpublicinterfaceMediaPlayer{ voidplay(StringaudioType,StringfileName);}高级播放器AdvancedMediaPlayerpublicinterfaceAdvancedMediaPlayer{ voidplayVlc(StringfileName); voidplayMp4......
  • cpp: Strategy Pattern II
     //Gold.h:此文件包含"Gold"类。策略模式StrategyPatternC++14//2023年5月1日涂聚文GeovinDuVisualStudio2022edit.#pragmaonce//#ifndefGOLD_H//#defineGOLD_H#ifndef_GOLD_#define_GOLD_#include<iostream>#include<sstrea......
  • cpp: Prototype Pattern
     //Gold.h:此文件包含"Gold"类。原型模式PrototypePatternC++14//2023年5月1日涂聚文GeovinDuVisualStudio2022edit.#pragmaonce#ifndefGOLD_H#defineGOLD_H#include<iostream>usingnamespacestd;namespaceDuJewelryPrototyp......
  • cpp: Abstract Factory Pattern
     //Gold.h:此文件包含"Gold"类。AbstractFactoryPatternC++14//2023年4月30日涂聚文GeovinDuVisualStudio2022edit.#pragmaonce#ifndefGOLD_H#defineGOLD_H#include<iostream>usingnamespacestd;namespaceDuJewelryAbstra......