当前位置: 首页 > news >正文

重温设计模式-外观模式和适配器模式的异同

文章目录

  • 目的不同
    • 适配器模式:
    • 外观模式:
  • 结构和实现方式不同
    • 适配器模式:
    • 外观模式:
  • 对客户端的影响不同
    • 适配器模式:
    • 外观模式:

目的不同

适配器模式:

主要目的是解决两个接口不兼容的问题,使得原本不能一起工作的类可以协同工作。它侧重于接口的转换,就像是一个翻译器,将一种接口形式转换为另一种接口形式,让客户端能够以自己期望的方式调用被适配者的功能。例如,当系统需要使用一个旧接口的类来完成新接口定义的任务时,通过适配器来改变接口形式,使其匹配新的需求。

外观模式:

目的是为复杂的子系统提供一个简单、统一的高层接口,隐藏子系统的复杂性。它更像是一个一站式服务,通过一个简单的接口来封装一系列复杂的子系统操作,让客户端能够方便地使用子系统的功能,而不用关心子系统内部的细节和复杂的交互关系。例如,对于一个包含多个模块(如文件读取、数据解析、结果展示)的复杂数据处理子系统,外观模式提供一个统一的接口,让客户端只需调用这个接口就能完成整个数据处理流程。

结构和实现方式不同

适配器模式:

包含目标接口(Target)、被适配者(Adaptee)和适配器(Adapter)三个主要部分。适配器类实现目标接口,并且在内部持有被适配者的实例,通过调用被适配者的方法并进行必要的转换来实现目标接口的方法。例如,目标接口有方法request(),被适配者有方法specificRequest(),适配器的request()方法内部会调用被适配者的specificRequest()方法并进行适当的转换来适配接口。
有类适配器和对象适配器两种实现方式。类适配器通过继承来实现接口的适配,对象适配器通过组合(将被适配者作为成员变量)来实现。

外观模式:

主要由外观类(Facade)和子系统类(Subsystem Classes)组成。外观类知道哪些子系统类负责处理请求,并将客户端的请求代理给适当的子系统对象。外观类的方法通常是按照一定的业务逻辑顺序调用子系统类的多个方法来完成一个复杂的功能。例如,外观类有一个方法processData(),这个方法内部可能会依次调用子系统中的文件读取方法、数据解析方法和结果展示方法来完成数据处理。
外观类和子系统类之间是一种委托关系,外观类不改变子系统类的接口,只是将多个子系统类的操作组合起来,提供一个更方便的接口给客户端使用。

对客户端的影响不同

适配器模式:

客户端通过目标接口来调用适配器的方法,间接使用被适配者的功能。对于客户端来说,它只知道目标接口的存在,不需要了解被适配者的接口细节,但是它仍然需要知道如何正确地使用目标接口,因为目标接口定义了客户端所期望的操作方式。例如,客户端知道要调用目标接口的chargeWith5V()方法来充电,而不需要知道这个方法在内部是如何适配电源接口的。

外观模式:

客户端只需要和外观类的简单接口进行交互,不需要了解子系统内部有多少个类、每个类的功能和接口是什么。客户端调用外观类的一个方法,就可以完成一个复杂的功能,不需要关心这个功能是如何由子系统中的多个操作组合完成的。例如,客户端只需要调用外观类的processData()方法,就可以完成数据处理,而不用去关心文件是如何读取、数据是如何解析和展示的。

http://www.lryc.cn/news/509521.html

相关文章:

  • 数据中台从centos升级为国产操作系统后,资源增加字段时,提交报500错误
  • 云原生后端开发(一)
  • 实现用户登录系统的前后端开发
  • 双刃剑下的机遇与风险:交易中的杠杆效应
  • 伏羲0.13(文生图)
  • 深度学习blog-卷积神经网络(CNN)
  • 深度学习中的残差网络、加权残差连接(WRC)与跨阶段部分连接(CSP)详解
  • 在Nginx部署Web应用,如何保障后端API的安全
  • arm架构 uos操作系统离线安装k8s
  • OpenCV-Python实战(1)——图像or视频文件处理
  • Flink SQL Cookbook on Zeppelin 部署使用
  • 【hackmyvm】DC04靶机wp
  • 记录jvm进程号
  • day19——web自动化测试(1)
  • go window安装protoc protoc生成protobuf文件
  • 微信小程序中momentjs无法切换中文问题处理
  • 数据结构:链表
  • 领克Z20结合AI技术,革新自动驾驶辅助系统
  • vector快慢指针+例题详解
  • 重温设计模式--1、组合模式
  • 单片机:实现SYN6288语音播报(附带源码)
  • cookie,session,token 的区别
  • 基于OpenAI Whisper AI模型自动生成视频字幕:全面解析与实战指南
  • 物理学天空的两朵乌云——量子论与相对论
  • 聚类之轮廓系数
  • Jenkins 构建流水线
  • RTK部分模糊度固定测量流程图
  • 力扣-数据结构-2【算法学习day.73】
  • 操作系统导论读书笔记
  • 基于3D-Speaker进行区分说话人项目搭建过程报错记录 | 通话录音说话人区分以及语音识别 | 声纹识别以及语音识别 | pyannote-audio